zoukankan      html  css  js  c++  java
  • 深入理解Logger日志——简介

    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 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑
      爆,并记得及时删除这些观察日志。
  • 相关阅读:
    23种设计模式(3)-原型模式
    23种设计模式(4)-生成器模式
    优秀程序员应具备的15个特性
    23种设计模式(5)-适配器模式
    23种设计模式(6)-装饰者模式
    23种设计模式(7)-代理模式
    SSH框架面试题集锦
    List,Set和Map详解及其区别和他们分别适用的场景
    (转) 网页浏览速度慢的排查原因
    (转)局域网的某个机器无法上网,的排错思路
  • 原文地址:https://www.cnblogs.com/zhouguanglin/p/13803918.html
Copyright © 2011-2022 走看看