很多时候,我看到了这样的错误日志记录:记录错误的最佳做法是什么?
System.out.println("Method aMethod with parameters a:"+a+" b: "+b);
print("Error in line 88");
所以..什么是记录一个错误的最佳做法?
编辑:
这是Java,但可能是C/C++,BASIC等
很多时候,我看到了这样的错误日志记录:记录错误的最佳做法是什么?
System.out.println("Method aMethod with parameters a:"+a+" b: "+b);
print("Error in line 88");
所以..什么是记录一个错误的最佳做法?
编辑:
这是Java,但可能是C/C++,BASIC等
的Apache共享日志记录不用于应用一般记录。它旨在被不希望强制API用户的日志实施的库或API使用。
Commons Logging也存在类加载问题。
选择其中一个[许多]日志API,使用最广泛的可能是log4j或Java Logging API。
如果您想要实现独立性,您可能需要考虑由log4j的原作者SLF4J。
挑选了一个实现,然后使用该实现中的日志级别/严重性一致,以便搜索/筛选日志更容易。
真的是用于记录一个错误没有最好的做法。它基本上只需要遵循一致的模式(在软件/公司/等),提供足够的信息来追踪问题。例如,您可能要跟踪的时间,方法,参数,调用方法等
只要你不只是打印“错误”
最简单的方法登录一个错误一致的格式是使用Log4j等日志框架(假设您使用的是Java)。在您的代码标准中包含一个日志记录部分以确保所有开发人员知道需要记录什么是非常有用的。大多数日志框架的好处在于它们具有不同的日志记录级别,因此您可以控制日志在开发,测试和生产之间的详细情况。
最好的做法是使用的java.util.logging框架
然后你就可以在这两种格式的日志消息
log.warning("..");
log.fine("..");
log.finer("..");
log.finest("..");
或者
log.log(Level.WARNING, "blah blah blah", e);
然后你可以使用一个logging.properties(下面的例子)在日志级别之间进行切换,并执行各种聪明的事情,如登录文件,旋转等。
handlers = java.util.logging.ConsoleHandler
.level = WARNING
java.util.logging.ConsoleHandler.level = ALL
com.example.blah = FINE
com.example.testcomponents = FINEST
在我看来应该避免像log4j和其他框架,Java已经拥有了你所需要的一切。
编辑
这可以适用作为任何编程语言的通用做法。能够控制来自单个属性文件的所有日志级别在企业应用程序中通常非常重要。
一些建议的最佳实践
使用日志框架。这将允许您:
如果您使用的是Java,那么slf4j现在优先于Jakarta commons logging作为伐木立面。
如前所述,slf4j是一个外观,你必须选择一个基础实现。 log4j,java.util.logging或'simple'。
按照你的框架的建议,以确保expensive logging operations没有不必要进行
上面提到的apache通用日志API是一个很好的资源。回到java,还有一个标准的错误输出流(System.err)。
直接从Java API:
此流已打开并准备 接受输出数据。
通常,此流对应于 显示输出或其他输出 由主机 指定的目标环境或用户。按照惯例, 此输出流用于显示 错误消息或其它信息 应来立即 关注用户的即使 主要输出流,的 变量out的值,已被重定向 到一般不会持续监控的文件或其他目标。
直接登录到控制台是可怕的,坦率地说,一个没有经验的开发人员的标志。做这种事情的唯一原因是1)他或她没有意识到其他方法,和/或2)开发人员没有想到将他/她的代码部署到生产站点时会发生什么,以及这个应用程序将如何维护。处理记录1GB /天或更多完全不需要的调试日志记录的应用程序令人生气。
普遍接受的最佳做法是使用一个日志框架具有的概念:
您将使用的最终日志框架当然取决于您的平台。一些常见的选项:
除了其他的答案最好是日志有意义的消息也许还有一些步骤,以避免未来的错误。当然,这取决于错误。
当消息指出“无法从文件X中读取,您没有相应的权限”时,您可能会从I/O错误中获得更多。
查看更多关于SO或search the web的例子。
这些通常具有高级功能,如自动记录源和按等级或起始位置过滤。这使得调试更容易。使用其中之一! (也检查链锯) – 2008-11-17 17:19:25