对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志是查找问题来源的重要依据。应用程序运行时的产生的各种信息,都应该通过日志 API 来进行记录。
- 完成某项操作所需的时间
通过它可以跟踪为什么系统响应变慢或者太快
- 处理完一个请求所耗费的时间,精确到毫秒
- 执行数据库查询的时间
- 从磁盘或者存储介质获取数据的时间
- 等等
- 异常和堆栈跟踪
- Sessions
知道一个问题是由谁引起的非常重要,因此在日志中使用会话标识符就变得必不可少。它可以简单到是一个 IP 地址或者是一个更复杂的 UUID,只要能区分不同的请求者就足够。
- 版本号
- 使用第三方类库
从发展方向上看,应该选择slf4j和logback。 当根据网上的测试,还是log4j比较性能比较好。
- 检查日志是否可以被记录
if (LOGGER.isDebugEnabled()) { LOGGER.debug("This is a message."); }
-
在适当的级别进行log
- FATAL:导致程序提前结束的严重错误。
- ERROR:运行时异常以及预期之外的错误。
- WARN:预期之外的运行时状况,不一定是错误的情况。
- INFO:运行时产生的事件。
- DEBUG:与程序运行时的流程相关的详细信息。
- TRACE:更加具体的详细信息。
- 谨慎修改配置文件
- 第三方包的信息
自然是配角,不要显示大量的第三方包中的debug信息。只显示warning以上信息。
- 日志包括线程和时间戳信息。
方便多线程下的调试。
- 日志包含上下文信息。
系统出错时,各个参数的信息,操作人员的信息。
- 日志包含充分的信息
比如不应该为null的为null了;某个范围的设置值超出范围。
- 你应该用机器可以解析的格式记录日志
利用使用其他工具进行分析。
- 不同业务领域使用不同的日志
比如系统登录日志,邮件发送日志,订单建立日志等等。
参考