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