logback的使用和配置详解

前言

  本文主要记录下logback中配置日志的时效性,和对输出日志进行按级别分包切割,按照时间进行切割,以及限制单个文件大小,和总文件大小,配置可保存的日志天数,还有配置控制台的输出格式和颜色

<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="false" scan="true" scanPeriod="60 seconds">

    <!-- 日志级别 -->
    <property name="log.level" value="error"/>
    <!-- 日志文件存储位置 -->
    <property name="file.filePath" value="./logs"/>
    <!-- 日志文件保留天数 -->
    <property name="file.maxHistory" value="60"/>
    <!-- 日志文件总大小 -->
    <property name="file.totalSizeCap" value="20GB"/>
    <!-- 单个日志文件大小 -->
    <property name="file.maxFileSize" value="10MB"/>
    <!-- 文件日志输出格式 -->
    <property name="log.pattern" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %-5level [%t] %c : %msg%n"/>
    <!-- 控制台日志输出格式 -->
    <property name="console.pattern"
              value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) [%t] %cyan(%c) : %highlight(%msg) %n"/>

    <!-- 项目根目录 -->
    <property name="project.root" value="com.xxxx"/>

    <!-- DEBUG控制台日志格式 -->
    <appender name="DEBUG_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--配置日志的级别过滤器,只保留DEBUG Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${console.pattern}</pattern>
        </encoder>
    </appender>

    <!-- INFO控制台日志格式 -->
    <appender name="INFO_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--配置日志的级别过滤器,只保留INFO Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${console.pattern}</pattern>
        </encoder>
    </appender>

    <!-- WARN控制台日志格式 -->
    <appender name="WARN_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--配置日志的级别过滤器,只保留WARN Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${console.pattern}</pattern>
        </encoder>
    </appender>

    <!-- ERROR控制台日志格式 -->
    <appender name="ERROR_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--配置日志的级别过滤器,只保留ERROR Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${console.pattern}</pattern>
        </encoder>
    </appender>

    <!--只输出DEBUG Level到日志文件的appender-->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,%i用来标记分割日志的序号 -->
            <fileNamePattern>${file.filePath}/debug/debug.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
            <!-- 单个日志文件大小 -->
            <maxFileSize>${file.maxFileSize}</maxFileSize>
            <!-- 保存 x 天的日志文件 -->
            <maxHistory>${file.maxHistory}</maxHistory>
            <!-- 日志文件总大小 -->
            <totalSizeCap>${file.totalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <!--配置日志的级别过滤器,只保留DEBUG Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!--只输出INFO Level到日志文件的appender-->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,%i用来标记分割日志的序号 -->
            <fileNamePattern>${file.filePath}/info/info.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
            <!-- 单个日志文件大小 -->
            <maxFileSize>${file.maxFileSize}</maxFileSize>
            <!-- 保存 x 天的日志文件 -->
            <maxHistory>${file.maxHistory}</maxHistory>
            <!-- 日志文件总大小 -->
            <totalSizeCap>${file.totalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <!--配置日志的级别过滤器,只保留INFO Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!--只输出WARN Level到日志文件的appender-->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,%i用来标记分割日志的序号 -->
            <fileNamePattern>${file.filePath}/warn/warn.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
            <!-- 单个日志文件大小 -->
            <maxFileSize>${file.maxFileSize}</maxFileSize>
            <!-- 保存 x 天的日志文件 -->
            <maxHistory>${file.maxHistory}</maxHistory>
            <!-- 日志文件总大小 -->
            <totalSizeCap>${file.totalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <!--配置日志的级别过滤器,只保留WARN Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!--只输出ERROR Level到日志文件的appender-->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,%i用来标记分割日志的序号 -->
            <fileNamePattern>${file.filePath}/error/error.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
            <!-- 单个日志文件大小 -->
            <maxFileSize>${file.maxFileSize}</maxFileSize>
            <!-- 保存 x 天的日志文件 -->
            <maxHistory>${file.maxHistory}</maxHistory>
            <!-- 日志文件总大小 -->
            <totalSizeCap>${file.totalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <!--配置日志的级别过滤器,只保留ERROR Level的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 输出项目的包, 不输出项目以外的; 输出以后, 日志不再向上传递(additivity="false") -->
    <logger name="${project.root}" level="${log.level}" additivity="false">
        <appender-ref ref="DEBUG_FILE"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="WARN_FILE"/>
        <appender-ref ref="ERROR_FILE"/>

        <!-- 生产环境请注释掉 {level}_CONSOLE, 生产环境不需要输出到控制台 -->
        <appender-ref ref="DEBUG_CONSOLE"/>
        <appender-ref ref="INFO_CONSOLE"/>
        <appender-ref ref="WARN_CONSOLE"/>
        <appender-ref ref="ERROR_CONSOLE"/>
    </logger>

    <!-- error 输出所有的包(除项目的包) -->
    <root level="${log.level}">
        <appender-ref ref="ERROR_FILE"/>
        <!-- 生产环境请注释掉 ERROR_CONSOLE, 生产环境不需要输出到控制台 -->
        <appender-ref ref="ERROR_CONSOLE"/>
    </root>

</configuration>

1.时效性
2.限制文件大小
3.限制总文件大小
4.按时间分隔
配置:

   <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>logs/%d{yyyy-MM-dd_HH}.log</fileNamePattern>
       <!-- 单个日志文件大小 -->
        <maxFileSize>20MB</maxFileSize>

        <!-- 保存 x 天的日志文件 -->
        <maxHistory>60</maxHistory>

        <!-- 日志文件总大小 -->
        <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>

    <!--日志输出格式-->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %-5level [%t] %c : %msg%n</pattern>
    </encoder>
</appender>
说明:RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件
SizeAndTimeBasedRollingPolicy:基于时间的回滚策略  

5.按级别分割

配置:<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!--配置日志的级别过滤器-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
        	<level>DEBUG</level>
        	<onMatch>ACCEPT</onMatch>
        	<onMismatch>DENY</onMismatch>
        </filter>
	</appender>

	说明:LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:

         <level>:设置过滤级别

         <onMatch>:用于配置符合过滤条件的操作

         <onMismatch>:用于配置不符合过滤条件的操作

6.易配置,无需重启

配置:

<configuration scan="true" scanPeriod="60 seconds" debug="false"> 
      <property name="APP_Name" value="myAppName" /> 
</configuration> 说明:根节点<configuration>,
包含下面三个属性:
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
子节点<property> :用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使“${}”来使用变量。

7.易查看

配置:

   <appender name="DEBUG" class="ch.qos.logback.core.ConsoleAppender">
    <!--配置日志的级别过滤器,只保留DEBUG的日志-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) [%t] %cyan(%c) : %highlight(%msg) %n</pattern>
    </encoder>
  </appender>

  <appender name="INFO" class="ch.qos.logback.core.ConsoleAppender">
    <!--配置日志的级别过滤器,只保留INFO的日志-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>%date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger) | %msg%n</pattern>
    </encoder>
</appender>

说明:将颜色配置在<pattern>里,通过过滤器将日志级别进行过滤,然后配置不同的颜色
<!-- magenta:洋红 -->
<!-- boldMagenta:粗红-->
<!-- cyan:青色 -->
<!-- white:白色 -->

7:控制打印

    logback additivity属性:

作用在于 logger是否使用 rootLogger配置的appender进行输出。

false:判断当前logger的appender-ref是否在rootLogger中存在,如果存在的,
则输出的配置则是logger的和rootLogger的并集配置,只输出一次。
不存在的,则使用logger的配置输出. 


true:
    判断当前logger的appender-ref是否在rootLogger中存在,如果存在的,
	logger按照自己配置输出一次,rootLogger按照logger和rootLogger的并集配置再输出一次。
	不存在的,各自按照各自配置输出 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值