LOG使用问题总结

来源:互联网 发布:mac如何连续看照片 编辑:程序博客网 时间:2024/04/19 23:38
  • 使用SLF4J的风格:
Log4J的风格:log.debug("Found " + records + " records matching filter: '" + filter + "'");
SLF4J的风格:log.debug("Found {} records matching filter: '{}'", records, filter);
  • 正确定义日志输出级别:(生产环境一般不输出debug以下级别的日志)
fatal - 严重的,造成服务中断的错误;
error - 其他错误运行期错误;
warn - 警告信息,如程序调用了一个即将作废的接口,接口的不当使用,运行状态不是期望的但仍可继续处理等;
info - 有意义的事件信息,如程序启动,关闭事件,收到请求事件等;
debug - 调试信息,可记录详细的业务处理到哪一步了,以及当前的变量状态;
trace - 更详细的跟踪信息;
  • 适当地给方法的输入输出加上日志 :

  • 输出Exceptions的全部Throwable信息,因为logger.error(msg)和logger.error(msg,e.getMessage())这样的日志输出方法会丢失掉最重要的StackTrace信息。



  • 不允许记录日志后又抛出异常,因为这样会多次记录日志,只允许记录一次日志。



  • 不允许出现System print(包括System.out.println和System.error.println)语句。



  • 不允许出现printStackTrace。



  • 输出有意义的日志: 每一条日志数据会包括描述和上下文两部分
无意义输出:log.info("");
只包含描述:log.debug("Message processed");
只包含上下文:log.debug(message.getJMSMessageID());
真正有意义的日志:log.debug("Message with id '{}' processed", message.getJMSMessageID());
  • 不要日志中加上一个莫名其妙的内容, 即所谓的"magic log".
比如有些程序员会在日志中随手敲上"&&&!#"这样一串字符, 用来帮助他们定位.
  • 能够一行日志搞定的,不要拆分成几行,增加查看和维护的成本
  • 尽量减少日志中中文的使用
  • 切记不要在日志中包含密码和个人隐私信息!
  • 不要在日志信息中包含全限定名:



  • 对于你输出的每一条log信息, 请仔细检查最终输出的内容是否存在问题
避免日志中出现NPE(空指针异常);
比如类属性的get方法、toString的使用等等
  • 一个理想的日志模式将包含下列信息:
    • 当前时间(不需要包含日志, 精确到毫秒)(日志模式配置中可以做)
    • 日志级别(如果你关心这个)
    • 线程名称
    • 简单的日志名(非全限定名的那种)
    • 日志描述信息
0 0
原创粉丝点击