logback知识点

一、依赖

首先是maven项目,引入框架

 针对ssm项目:

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.11</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.11</version>
</dependency>

针对springboot项目:不需要额外的导入框架

<!--该依赖已经集成了logback-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

  

二、运行方式:

ssm项目:

classpath下会默认寻找logback-test.xml、logback.xml 文件

springboot项目:

classpath会寻找ogback-test.groovy、logback-test.xml、logback.groovy 或者 logback.xml,如果都找不到的话,才会加载项目路径下的 logback-spring.xml

三、配置结构图

 

四、配置组件详解

1、logger 日志记录器

  logger日志级别继承 ,如果日志记录请求的级别高于或等于记录器的有效级别,则该日志请求是有效的。日志级别按以下顺序排序: TRACE < DEBUG < INFO < WARN < ERROR。

     logger属性:

  • name:指定全限定包名

  • level:日志输出级别,如果没有配置,则参考上面的级别继承

  • additivity:默认为true。一个logger可以配置多个appender,logger输出的日志会输出到当前记录器绑定的appender和父级们logger(直到root logger)绑定的appender,可以设置additivity 属性为false,则logger输出的日志仅会输出到当前记录器绑定的appender如果additivity为true,会存在重复输出日志情况

如果additivity为true,会存在重复输出日志情况。

 <logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" additivity="false">
        <appender-ref ref="stdout" />
        <appender-ref ref="normal" />
    </logger>

    <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor" level="DEBUG" additivity="false">
        <appender-ref ref="stdout" />
        <appender-ref ref="normal" />
    </logger>
    
    <!-- mybatis日志打印的是mapper namespace -->
    <logger name="com.mvc.testdemo2" level="info" additivity="false">
        <appender-ref ref="stdout" />
        <appender-ref ref="normal" />
    </logger>

 

2、appender  配置日志文件输出目的,
常用的类有ConsoleAppender、FileAppender 、RollingFileAppender 

1  子元素   

 1.1  file 文件地址 

 1.2  rollingPolicy 滚动行为

 1.2.1  rollingPolicy 常用的类有TimeBasedRollingPolicy、SizeAndTimeBasedRollingPolicy

     TimeBasedRollingPolicy :TimeBasedRollingPolicy是最受欢迎的滚动策略。它基于时间进行滚动,可以是按月或按天等。TimeBasedRollingPolicy承担滚动以及触发所述滚动的责任。它实现了rolling policy同时也实现了triggering policy。

子元素:{

    fileNamePattern: 必选;它的值应包括文件名以及适当放置的%d转换说明符。所述 %d由指定的转换说明可包含日期和时间模式 java.text.SimpleDateFormat类。如果省略了日期和时间模式,则采用默认模式 yyyy-MM-dd;可以指定多个%d,但是只有一个主要的,其他的都要使用‘aux’标记,多个%d允许你组织对日志文件归类,例如按照年月分文件夹/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log
    maxHistory:        设置存档文件保存时间,日志文件至少保存 15 天,因为有些异常具备以“周”为频次发生的特点。
    totalSizeCap:      控制归档文件的大小

}

 

  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/home/demo/local/log/local.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
  </rollingPolicy>

 

 SizeAndTimeBasedRollingPolicy : 支持按照时间拆分后,再按文件大小拆分:例如:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
       <!-- each file should be at most 100MB, keep 60 days worth of history, but at most             20GB -->
       <maxFileSize>100MB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

 

1.3  encoder 日志输出格式

encoder负责转换事件为字节数组并将字节数组写入输出流中。PatternLayoutEncoder 是最常用的encoder,该类通过使用PatternLayout来格式化日志事件。我们可以直接配置PatternLayoutEncoder ,而不用配置PatternLayout,它默认使用PatternLayout进行格式输出

PatternLayout:
  它将日志事件转换成字符串,但是可以自定义字符串通过调整PatternLayout的转换模式。

PatternLayout的转换模式跟C语言的printf()函数紧密相关。
常用的模式有:

  % d{pattern}: 日期

  % level 日志级别

  %thread 线程名称

  %class 全限定类名,日志请求记录所在的类

  %method 日志请求记录所在的方法

  %line 日志请求记录的行号

  %n 换行

  %logger{length} 输出日志logger记录器的名字,length指定输出名字长度,logback会智能缩写而不丢失语义。

  %msg 输出日志记录器记录的消息

多个模式之间分隔符,在大多数情况下,文字需包含空格或其他分隔字符(’[’,’]’,’-’),这样就不会与转换词混淆

例如:

 <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
 </encoder>

 

1.4  filter 对appender收到的日志进行过滤,只有满足Filter条件的日志才输出到日志文件

  对appender收到的日志调用decide方法进行过滤,只有满足Filter条件的日志才输出到日志文件,decide方法有三个返回值,DENYACCEPTNEUTRAL

  如果返回的值为DENY,则立即删除日志事件,而不咨询其余的筛选器;
  如果返回的值是NEUTRAL中性的,则查询列表中的下一个筛选器,如果没有其他筛选器可供查询,则日志事件将正常处理;
  如果返回值为ACCEPT,则会立即处理日志事件,跳过其余筛选器的调用。

LevelFilter

该过滤器对日志的级别过滤,如果事件日志级别等于配置的级别,过滤器接受或者拒绝该事件日志,依赖于onMatch 和 onMismatch属性

     <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

 

1.5  triggeringPolicy 指定何时发送滚动   

该triggering policy通过配置一个maxFileSize参数,当日志文件超过该阈值,会通知RollingFileAppender 触发日志翻滚。但一般triggering policy可以不用配置,TimeBasedRollingPolicy 已经完美集成了.

2  appender   实现类

 2.1  RollingFileAppender 扩展了FileAppender,
具有滚动更新日志文件的功能;例如,RollingFileAppender可以登录到一个名为log.txt的文件,一旦满足某个条件,就可以保存当前日志文件,并滚动输出到新的日志文件

子元素:{

    append:如果为true,则追加到已存在的日志文件,否则截断现有文件,默认为true
    file: 指定日志写入文件的名字。如果文件不存在,则创建包括父级目录。windows系统要避开“\”,正确例子可以指定为c:/temp/test.log或c:\\temp\\test.log
    encoder:输出的格式
    rollingPolicy: 指定RollingFileAppender发生滚动时的行为
    triggeringPolicy:指定RollingFileAppender何时发生滚动过程

}

2.2  FileAppender

子元素:{

    append:如果为true,则追加到已存在的日志文件,否则截断现有文件,默认为true
    file: 指定日志写入文件的名字。如果文件不存在,则创建包括父级目录。windows系统要避开“\”,正确例子可以指定为D:/demo/local.log或D:\\demo\\local.log
    encoder: 输出的格式

}

 2.3    ConsoleAppender 写日志到标准输出流,可以配置target属性为system.out,也可以指定System.error,默认System.out

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!--默认System.out,也可以指定System.error -->
    <target>System.out</target>
    <!-- encoders 默认类型ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>

appender例如:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 默认使用PatternLayoutEncoder -->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="normal" class="ch.qos.logback.core.rolling.RollingFileAppender">
      //文件地址
        <file>/home/demo/local/log/local.log.zip</file>
      //  滚动行为
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        //文件名称
            <fileNamePattern>/home/demo/local/log/local.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
        //最大历史
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    //输出格式
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/home/demo/local/log/error.log</file>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>/home/demo/local/log/error.%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>

3、root

 

posted @ 2022-09-07 15:59  清华大咖  阅读(131)  评论(0编辑  收藏  举报