首页 > 技术文章 > 深入理解Logger日志——简介

zhouguanglin 2020-10-12 17:13 原文

Logger日志

  日志主要是记录系统中相关问题及事件信息,可以通过这些信息排查错误的发生原因,一些事件的追踪,业务逻辑统计分析。好的日志可以省去开发者一大半的时间。

  在个人那么多天的研究中,从开始对Logger一无所知,或者说有愚蠢的想法(不就简单的打印日志而已),到现在发现Logger体系如此美妙绝伦。


Logger日志常用框架

  常用的实现框架:

  • Log4j:Apache的开源项目,是一个功能强大的日志组件,提供方便的日志记录。
       <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.29</version>
        </dependency>
View Code
  • Logback:Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access
        
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>    
View Code
  • Log4j2:是log4j 1.x 的升级版,参考了Logback的一些优秀的设计,并且修复了一些问题,采取异步日志模式,解决了因日志造成的性能问题,带来了一些重大的提升。(值得推荐)
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-jcl</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
View Code
  • Common-logging:是apache提供的一个通用的日志接口。用户可以通过配置自由选择第三方的日志组件作为具体实现。
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
View Code
  • Slf4j:类似于Apache Common-Logging,j是一个门面适配器,所有的日志代码都可以用slf4j方式,它会根据项目具体依赖的日志实现包进行日志操作,只需修改pom.xml文件中的日志实现依赖(已做好桥接包)
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
     <version>1.7.21</version>
View Code

  还有好多其他的框架不再一一介绍,使用什么框架主要还是看项目和人所适合的方向。

常用日志框架的性能比较--参考连接

 

 

 

 


 

Logger日志等级描述

   对于标准级别它们关系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF

  之后我会对等级的动态调整做相应的文章进一步介绍


 

日志规约——参考阿里嵩山版

  1. 应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
  2. 在日志输出时,字符串变量之间的拼接使用占位符的方式。
    logger.debug("Processing trade with id: {} and symbol: {}", id, symbol);
  3. 避免重复打印日志,浪费磁盘空间,务必在日志配置文件中设置 additivity=false。
      <logger name="com.taobao.dubbo.config" additivity="false">
  4. 生产环境禁止直接使用 System.out 或 System.err 输出日志或使用,
    标准日志输出与标准错误输出文件每次 Jboss 重启时才滚动,如果大量输出送往这两个文件,容易
    造成文件大小超过操作系统大小限制。
  5. 日志打印时禁止直接用 JSON 工具将对象转换成 String。
    如果对象里某些 get 方法被覆写,存在抛出异常的情况,则可能会因为打印日志而影响正常业务流
    程的执行。
  6. 谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使用warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑
    爆,并记得及时删除这些观察日志。

 

推荐阅读