Fork me on GitHub

logback

  • logback介绍

    • 使用logback的目的
      • 故障定位
      • 显示程序运行状态,定位为题的依据
    • 三大模块
      • logback-access
        • 与servlet容器集成,提供通过http访问日志功能,意思就是第三方软件可以通过这个模块来访问logback记录的日志
      • logback-classic
        • log4j的改良版本,完整实现了slf4j的API,可以让我们很方便地更换成其他日志系统,比如说log4j等;
      • logback-core
        • 为前面两个模块提供基础模块
  • logback配置

    • 当我们使用logback-classic.jar时,应用启动,logback加载顺序:
      1. 在系统配置文件System Properties中寻找是否有logback.configurationFile对应的value
      2. 在classpath下寻找是否有logback.groovy(即logback支持groovy与xml两种配置方式)
      3. 在classpath下寻找是否有logback-test.xml
      4. 在classpath下寻找是否有logback.xml
    • logback主要标签介绍

      1. <configuration>,只有三个属性,分别是:
        1. scan:当scan被设置为true时,当配置文件发生改变,将会被重新加载,默认为true
        2. scanPeriod:检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认为毫秒,当scan=true时这个值生效,默认时间间隔为1分钟
        3. debug:当被设置为true时,将打印出logback内部日志信息,实时查看logback运行信息,默认为false;
      2. <appender>,指定日志输出目的地,即日志输出的媒介,可以是控制台、文件、远程套接字服务器等

        1. ConsoleAppender,将日志输出到控制台

          1
          2
          3
          4
          5
          6
          <!-- 控制台设置 -->
          <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
          <encoder>
          <pattern>${log.pattern}</pattern>
          </encoder>
          </appender>
        2. FileAppender,将日志输出到文件中

          1
          2
          3
          4
          5
          6
          7
          <appender name="FILE" class="ch.qos.logback.core.FileAppender">
          <file>D:/123.log</file>
          <append>true</append>
          <encoder>
          <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
          </encoder>
          </appender>
        3. RollingFileAppender,滚动记录文件,先将日志记录到指定文件,当符合某个条件时再讲日志记录到其他文件

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          <!-- DEBUG -->
          <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
          <!-- 文件路径 -->
          <file>${log.filePath}/debug.log</file>
          <!-- <rollingPolicy>的作用是当发生滚动时,定义RollingFileAppender的行为,其中上面的TimeBasedRollingPolicy是最常用的滚动策略,它根据时间指定滚动策略,既负责滚动也负责触发滚动 -->
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <!-- 文件名称 -->
          <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
          </fileNamePattern>
          <!-- 文件最大保存历史数量 -->
          <maxHistory>${log.maxHistory}</maxHistory>
          </rollingPolicy>
          <!-- 输出格式 -->
          <encoder>
          <pattern>${log.pattern}</pattern>
          </encoder>
          <!-- 在当前给到的日志级别下再进行一次过滤 -->
          <filter class="ch.qos.logback.classic.filter.LevelFilter">
          <level>DEBUG</level>
          <onMatch>ACCEPT</onMatch>
          <onMismatch>DENY</onMismatch>
          </filter>
          </appender>
      3. <logger>,作为日志的记录器,主要用于存放日志对象,还可以定义日志类型、级别等;其中有<root>标签,也是<logger>元素,是根logger,只有一个level属性;logger有三个属性:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        <logger name="com.enpong.o2o" level="${log.level}" additivity="true">
        <appender-ref ref="debugAppender"/>
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="errorAppender"/>
        </logger>

        <root level="info">
        <appender-ref ref="consoleAppender"/>
        </root>
        1. name:用来指定受此logger约束的某一个包或者具体的某一个类
        2. level(可选):用来设置打印级别,五个常用打印级别从低至高依次为TRACE、DEBUG、INFO、WARN、ERROR,如果未设置此级别,那么当前logger会继承上级的级别
        3. additivity(可选):是否向上级logger传递打印信息,默认为true
    • 全部配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      <?xml version="1.0" encoding="UTF-8"?>
      <configuration scan="true" scanPeriod="60 seconds" debug="false">
      <!-- 定义参数常量 -->
      <!-- TRACE<DEBUG<INFO<WARN<ERROR -->
      <!-- logger.trace("msg") logger.debug... -->
      <property name="log.level" value="debug" />
      <property name="log.maxHistory" value="30" />
      <property name="log.filePath" value="${catalina.base}/logs/webapps" />
      <property name="log.pattern"
      value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
      <!-- 控制台设置 -->
      <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
      <pattern>${log.pattern}</pattern>
      </encoder>
      </appender>
      <!-- DEBUG -->
      <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <!-- 文件路径 -->
      <file>${log.filePath}/debug.log</file>
      <!-- <rollingPolicy>的作用是当发生滚动时,定义RollingFileAppender的行为,其中上面的TimeBasedRollingPolicy是最常用的滚动策略,它根据时间指定滚动策略,既负责滚动也负责触发滚动 -->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 文件名称 -->
      <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
      </fileNamePattern>
      <!-- 文件最大保存历史数量 -->
      <maxHistory>${log.maxHistory}</maxHistory>
      </rollingPolicy>
      <encoder>
      <pattern>${log.pattern}</pattern>
      </encoder>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
      </filter>
      </appender>
      <!-- INFO -->
      <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <!-- 文件路径 -->
      <file>${log.filePath}/info.log</file>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 文件名称 -->
      <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
      </fileNamePattern>
      <!-- 文件最大保存历史数量 -->
      <maxHistory>${log.maxHistory}</maxHistory>
      </rollingPolicy>
      <encoder>
      <pattern>${log.pattern}</pattern>
      </encoder>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
      </filter>
      </appender>
      <!-- ERROR -->
      <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <!-- 文件路径 -->
      <file>${log.filePath}/erorr.log</file>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 文件名称 -->
      <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
      </fileNamePattern>
      <!-- 文件最大保存历史数量 -->
      <maxHistory>${log.maxHistory}</maxHistory>
      </rollingPolicy>
      <encoder>
      <pattern>${log.pattern}</pattern>
      </encoder>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
      </filter>
      </appender>
      <logger name="com.enpong.o2o" level="${log.level}" additivity="true">
      <appender-ref ref="debugAppender"/>
      <appender-ref ref="infoAppender"/>
      <appender-ref ref="errorAppender"/>
      </logger>
      <root level="info">
      <appender-ref ref="consoleAppender"/>
      </root>
      </configuration>
-------------本文结束感谢您的阅读-------------