Language agnostic 记录错误的最佳做法是什么?
我多次看到类似以下错误的日志记录:Language agnostic 记录错误的最佳做法是什么?,language-agnostic,logging,error-handling,Language Agnostic,Logging,Error Handling,我多次看到类似以下错误的日志记录: System.out.println("Method aMethod with parameters a:"+a+" b: "+b); print("Error in line 88"); 所以。。记录错误的最佳做法是什么 编辑: 这是java,但可能是C/C++、basic等。记录错误的最佳实践并不存在。它基本上只需要遵循一个一致的模式(在软件/公司/等内部),提供足够的信息来跟踪问题。例如,您可能希望跟踪时间、方法、参数、调用方法等 只要您不只是打印“E
System.out.println("Method aMethod with parameters a:"+a+" b: "+b);
print("Error in line 88");
所以。。记录错误的最佳做法是什么
编辑:
这是java,但可能是C/C++、basic等。记录错误的最佳实践并不存在。它基本上只需要遵循一个一致的模式(在软件/公司/等内部),提供足够的信息来跟踪问题。例如,您可能希望跟踪时间、方法、参数、调用方法等
只要您不只是打印“Error in”以一致格式记录错误的最简单方法是使用Log4j之类的日志框架(假设您使用的是Java)。在代码标准中包含日志部分非常有用,可以确保所有开发人员都知道需要记录哪些内容。大多数日志框架的优点是它们具有不同的日志级别,因此您可以控制开发、测试和生产之间日志记录的详细程度。最佳实践是使用java.util.logging框架 然后,您可以使用这两种格式之一记录消息
log.warning("..");
log.fine("..");
log.finer("..");
log.finest("..");
或
然后,您可以使用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是一个门面,然后您必须选择一个底层实现。log4j、java.util.logging或“simple”
- 遵循您的框架建议,确保不会不必要地执行
如果您想要实现独立性,您可能需要考虑Log4J的原始作者
选择一个实现后,在该实现中一致地使用日志级别/严重性,这样搜索/过滤日志就更容易了。上面提到的apache通用日志API是一个很好的资源。回到java,还有一个标准的错误输出流(System.err) 直接从Java API: 此流已打开并准备就绪 接受输出数据 通常,该流对应于 显示输出或其他输出 主机指定的目标 环境或用户。按照惯例, 此输出流用于显示 错误消息或其他信息 这应该是迫在眉睫的 用户的注意,即使 主输出流的值 变量out已被重定向 发送到一个文件或其他目的地 通常不连续监测
直接登录到控制台是可怕的,坦率地说,这是一个缺乏经验的开发人员的标志。这样做的唯一原因是1)他或她不知道其他方法,和/或2)开发人员一点也没有考虑过当他/她的代码部署到生产站点时会发生什么,以及在那时应用程序将如何维护。处理一个每天记录1GB或更多完全不需要的调试日志的应用程序是令人恼火的 普遍接受的最佳实践是使用具有以下概念的日志框架:
- 爪哇:
- 内置
- .NET:
- C++:
请参阅或上的更多示例。这些示例通常具有高级功能,例如自动记录
handlers = java.util.logging.ConsoleHandler
.level = WARNING
java.util.logging.ConsoleHandler.level = ALL
com.example.blah = FINE
com.example.testcomponents = FINEST