很多次我看到记录这样的错误:
System.out.println("Method aMethod with parameters a:"+a+" b: "+b);
print("Error in line 88");
那么..记录错误的最佳做法是什么?
编辑:
这是java但可能是C / C ++,基本等。
直接登录到控制台是可怕的,坦率地说,是没有经验的开发人员的标志。 做这种事情的唯一原因是1)他或她不知道其他方法,和/或2)开发人员没有想到将他/她的代码部署到生产站点时会发生什么,以及如何在该点维护应用程序。 处理记录1GB /天或更多完全不需要的调试日志记录的应用程序是令人抓狂的。
普遍接受的最佳做法是使用具有以下概念的Logging框架:
您将使用的最终日志框架当然取决于您的平台。 一些常见的选择:
Apache Commons Logging不适用于应用程序常规日志记录。 它旨在供不希望强制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记录为日志记录外观。
如上所述,slf4j是一个外观,然后你必须选择一个底层实现。 log4j,java.util.logging或'simple'。
遵循框架的建议,确保不必要地进行昂贵的日志记录操作
记录错误确实没有最佳实践。 它基本上只需要遵循一致的模式(在软件/公司/等内),提供足够的信息来跟踪问题。 例如,您可能希望跟踪时间,方法,参数,调用方法等。
只要你不打印“错误”
如上所述的apache通用日志记录API是一个很好的资源。 回头参考java,还有一个标准的错误输出流(System.err)。
直接来自Java API:
此流已打开并准备接受输出数据。
通常,该流对应于主机环境或用户指定的显示输出或另一输出目的地。 按照惯例,此输出流用于显示应立即引起用户注意的错误消息或其他信息,即使主要输出流(变量out的值)已重定向到文件或其他目标,即通常不会持续监控。