springboot集成logback,按info,warn,error分别保存在不同文件夹下

1、配置logback-spring.xml

logback-spring.xml是官方推荐的命名方法,你也可以取其他的名字,如:logback.xml,但还是建议取名为logback-spring.xml。具体配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>    
 <!-- 定义日志存放目录 -->
 <property name="logPath" value="d:/project_log" />
 <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
 <!-- 控制台日志 -->
  <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d - %msg%n</pattern>
        </layout>
    </appender>
    <!-- debug日志,记录查询语句 -->
    <appender name="fileDebugLog" 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>
        <!-- 设置日志输出格式 -->
        <encoder>
            <pattern>%date %-5level %logger{5} - %msg%n</pattern> 
            <!-- 设置编码格式,以防中文乱码 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset> 
        </encoder>
        <!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到debug文件夹下,但debug.log不改变,直到第二天才会重置 -->
        <File>${logPath}/debug.log</File>
        <!--滚动策略,靠这个来生成不同文件。  TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
            <fileNamePattern>${logPath}/debug/debug.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!-- 日志文件保留天数,超过这个则删除旧的日志 -->
            <MaxHistory>30</MaxHistory>
            <!-- 日志文件最大值,超过则进行分割 -->
            <maxFileSize>20MB</maxFileSize>
            <!-- 日志保留最大的值,超过这个则删除旧的日志 -->
            <totalSizeCap>2GB</totalSizeCap>
            <!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>
    <!-- 普通日志 -->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 设置日志输出格式 -->
        <encoder>
            <pattern>%date %-5level %logger{5} - %msg%n</pattern> 
            <!-- 设置编码格式,以防中文乱码 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset> 
        </encoder>
        <!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到info文件夹下,但info.log不改变,直到第二天才会重置 -->
        <File>${logPath}/info.log</File>
        <!--滚动策略,靠这个来生成不同文件。  TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
            <fileNamePattern>${logPath}/info/info.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!-- 日志文件保留天数,超过这个则删除旧的日志 -->
            <MaxHistory>30</MaxHistory>
            <!-- 日志文件最大值,超过则进行分割 -->
            <maxFileSize>20MB</maxFileSize>
            <!-- 日志保留最大的值,超过这个则删除旧的日志 -->
            <totalSizeCap>2GB</totalSizeCap>
            <!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>
    <!-- 警告日志 -->
    <appender name="fileWarnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 设置日志输出格式 -->
        <encoder>
            <pattern>%date %-5level %logger{5} - %msg%n</pattern> 
            <!-- 设置编码格式,以防中文乱码 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset> 
        </encoder>
        <!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到info文件夹下,但warn.log不改变,直到第二天才会重置 -->
        <File>${logPath}/warn.log</File>
        <!--滚动策略,靠这个来生成不同文件。  TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
            <fileNamePattern>${logPath}/warn/warn.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!-- 日志文件保留天数,超过这个则删除旧的日志 -->
            <MaxHistory>30</MaxHistory>
            <!-- 日志文件最大值,超过则进行分割 -->
            <maxFileSize>20MB</maxFileSize>
            <!-- 日志保留最大的值,超过这个则删除旧的日志 -->
            <totalSizeCap>2GB</totalSizeCap>
            <!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>
    <!-- 错误日志 -->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 拦截处理ERROR级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 设置日志输出格式 -->
        <encoder>
            <pattern>%date %-5level %logger{5} - %msg%n</pattern> 
            <!-- 设置编码格式,以防中文乱码 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset> 
        </encoder>
         <!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到info文件夹下,但error.log不改变,直到第二天才会重置 -->
        <File>${logPath}/error.log</File>
        <!--滚动策略,靠这个来生成不同文件。  TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
            <fileNamePattern>${logPath}/error/error.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!-- 日志文件保留天数,超过这个则删除旧的日志 -->
            <MaxHistory>30</MaxHistory>
            <!-- 日志文件最大值,超过则进行分割 -->
            <maxFileSize>20MB</maxFileSize>
            <!-- 日志保留最大的值,超过这个则删除旧的日志 -->
            <totalSizeCap>2GB</totalSizeCap>
            <!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>
    
      <root level="info">
        <appender-ref ref="consoleLog" />
        <appender-ref ref="fileInfoLog" />
        <appender-ref ref="fileErrorLog" />
        <appender-ref ref="fileWarnLog" />
    </root>
 <!-- 记录sql语句 -->
 <logger name="com.project.base.dao" level="debug" >
   <appender-ref ref="fileDebugLog" />
 </logger>
  <!-- 全局log -->
 <logger name="com.project" level="info"/>
</configuration>

滚动策略可以复制粘贴,主要是需不需要打印这些类型的日志,不需要这种类型的日志直接删掉,不进行配置就可以了就可以了。控制台感觉没必要保留。日志保留天数自己修改想要的天数。

<logger>标签里是你自己的项目中需要输出日志的根包路径

下面对这些配置信息做一些说明:

appender——用于确定日志输出到什么日志文件中去或是输出到控制台

appender下的filter——确定使用什么样的过滤器来过滤将要输出的日志,本例中输出到日志文件的过滤器使用的是ch.qos.logback.classic.filter.LevelFilter,该过滤器下有三个标签<level></level>、<onMatch></onMatch>、<onMismatch></onMismatch>,

<onMatch>ACCEPT</onMatch>表示,当将要打印的日志级别符合<level></level>中定义的级别时,就输出;
<onMismatch>DENY</onMismatch>表示,当将要打印的日志级别不符合中定义的级别时,会拒绝输出。如在代码中有一行这样的日志
log.info(“info log msg”);
log.debug(“debug log msg”);
log.error(“error log msg”);
对于如下配置来说:

<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>

该过滤器会输出"info log msg",而"debug log msg"和"error log msg"都不会输出。这样就做到了将日志按级别分别进行输出的目的。

可能有人会有疑问,为什么在标签下有一个level,在过滤器filter中也有一个level。

<logger/>标签下的level决定,什么样的日志有机会被输出,而filter中的日志决定将日志按什么样的规则输出到日志文件中去。

我们可以认为是,logger中的level才是决定日志是否能被打印,filter让日志变得更可控,或是二次筛选。这个需要一段时间去理解一下,一时不明白,就先按照上面的配置来,我想有一天会明白的。

参考:https://blog.csdn.net/shangcunshanfu/article/details/103037528

2、配置application.properties

在application.properties里面加上

##logback日志相关
logging.config=classpath:logback-spring.xml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值