spring 4.3.x 整合 logback 1.2.3

第一步:引入依赖

spring-4.3.28.RELEASE
slf4j-1.7.30
        <!-- slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>

        <!-- jcl-over-slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.30</version>
        </dependency>
        <!-- log4j-over-slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.7.30</version>
        </dependency>
        <!-- jul-to-slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>1.7.30</version>
        </dependency>

        <!-- logback-ext-spring -->
        <dependency>
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.5</version>
        </dependency>

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

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-access</artifactId>
            <version>1.2.3</version>
        </dependency>

依赖引入注意事项:适配包与桥接器包不可以同时出现,否则会造成死循环,导致栈溢出错误!

第二步:web.xml配置

<context-param>
    <param-name>logbackConfigLocation</param-name>
    <param-value>classpath:/config/logback-prod.xml</param-value>
</context-param>

<!-- 当使用自定义Logback初始化时,此侦听器应在 ContextLoaderListener 之前注册到 web.xml文件 -->
<listener>
    <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

第三步:配置logback的xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--
        scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true.
        scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当scan为true时,此属性生效。默认的时间间隔为1分钟.
        debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
    -->
    <!-- 在Eclipse中运行,请到Eclipse的安装目录中找log文件,Tomcat下,请到Tomcat目录下找
        ./logs
        <property name="LOG_PATH" value="${catalina.base}/logs"/>

        <property name="LOG_PATH" value="./logs" />

        windows系统日志保存路径:<property name="LOG_PATH" value="E:/all-logs/wave-task-system" />
        linux系统环境下保存路径:<property name="LOG_PATH" value="${catalina.base}/logs" />
     -->
    <property name="LOG_PATH" value="${catalina.base}/logs" />
    <timestamp key="byDay" datePattern="yyyy-MM-dd" />

    <!-- 项目名称 -->
    <property name="PROJECT_NAME" value="xxx"/>

    <contextName>task</contextName>
    <!--
        日志输出格式:
                   %-5level - 日志级别
                   %d{yyyy-MM-dd HH:mm:ss.SSS} - 日期
                   %c - 类的完整全路径名称
                   %M - 方法method
                   %L - 或者 %line,行号
                   %thread - 线程名称
                   %m - 或者:%msg,为日志记录的信息
                   %n - 换行

格式化输出(配色):%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符:
<pattern>%yellow(%d{yyyy-MM-dd HH:mm:ss}) %red([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %magenta(%msg) %n</pattern>
<pattern>%yellow(%d{yyyy-MM-dd HH:mm:ss}) %red([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %magenta(%msg) %n</pattern>


http://logback.qos.ch/manual/filters.html#thresholdFilter
    -->
    <property name="console-pattern" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %red([%thread]) %cyan(%logger{50}) - %magenta(%msg) %n"/>

    <property name="file-pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c %M %L [%thread] %msg%n" />

    <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS} %level [%thread] [%logger{50}:%line] %msg%n</pattern>

    <!-- console : 控制台日志   -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出(配色):%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${console-pattern}</pattern>
            <!-- 日志编码一定要加上class,否则会出现中文乱码 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>

    </appender>

    <!-- 配置TRACE, DEBUG, INFO, WARN, ERROR,ALL 日志的Appender -->

    <!-- info 日志 -->
    <appender name="INFO-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件保存路径 -->
        <file>${LOG_PATH}/log-info-${byDay}.log</file>

        <!-- 日志消息输出格式配置 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${file-pattern}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志:默认:true -->
        <append>true</append>
        <!-- 指定拆分规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按照时间和压缩格式声明拆分的文件名   %i 可以按照序号输出日志文件名 -->
            <fileNamePattern>${LOG_PATH}/log-info-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
            <!-- 按照文件大小拆分: 文件超过maxFileSize就开始压缩存档到:*.log.gz文件中 -->
            <maxFileSize>20MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>30</maxHistory>
            <!-- 存档文件的总大小最多为1GB : Total size of all archived files is at most 1GB -->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>

        <triggeringPolicy>

        </triggeringPolicy>

        <!-- 日志级别过滤规则 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 日志过滤规则 -->
            <level>INFO</level>
            <!-- 超过 INFO 级别的日志进行记录,小于 INFO 级别的日志就拒绝记录到该文件中 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- error 日志 -->
    <appender name="ERROR-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件保存路径 -->
        <file>${LOG_PATH}/log-error-${byDay}.log</file>
        <!-- 日志消息输出格式配置 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${file-pattern}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志:默认:true -->
        <append>true</append>
        <!-- 指定拆分规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按照时间和压缩格式声明拆分的文件名
                 如果文件在一天内超过maxFileSize,则文件将以索引"%i"从0开始存档
             -->
            <fileNamePattern>${LOG_PATH}/log-error-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
            <!-- 按照文件大小拆分: 文件超过maxFileSize就开始压缩存档 -->
            <maxFileSize>20MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>30</maxHistory>
            <!-- 存档文件的总大小最多为1GB : Total size of all archived files is at most 1GB -->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>

        <!-- 日志级别过滤规则 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 日志过滤规则 -->
            <level>ERROR</level>
            <!-- 超过 error 级别的日志进行记录,小于 error 级别的日志就拒绝记录到该文件中 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- warn 日志 -->
    <appender name="WARN-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件保存路径 -->
        <file>${LOG_PATH}/log-warn-${byDay}.log</file>

        <!-- 日志消息输出格式配置 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${file-pattern}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志:默认:true -->
        <append>true</append>
        <!-- 指定拆分归档规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按照时间和压缩格式声明拆分的文件名   %i 可以按照序号输出日志文件名
                 如果文件在一天内超过maxFileSize,则文件将以索引"%i"从0开始存档
             -->
            <fileNamePattern>${LOG_PATH}/log-warn-%d{yyyy-MM-dd HH:mm:ss}-%i.log.gz</fileNamePattern>
            <!-- 按照文件大小拆分 -->
            <maxFileSize>20MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>30</maxHistory>
            <!-- Total size of all archived files is at most 5GB -->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>

        <!-- 日志级别过滤规则 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 日志过滤规则 -->
            <level>WARN</level>
            <!-- 超过 WARN 级别的日志进行记录,小于 WARN 级别的日志就拒绝记录到该文件中 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>



    <!-- debug 日志:开发需要的话可以配置输出到文件,生产不需要 -->
    <appender name="DEBUG-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件保存路径 -->
        <file>${LOG_PATH}/log-debug-${byDay}.log</file>

        <!-- 日志消息输出格式配置 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${file-pattern}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志:默认:true -->
        <append>true</append>
        <!-- 指定拆分归档规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按照时间和压缩格式声明拆分的文件名   %i 可以按照序号输出日志文件名
                 如果文件在一天内超过maxFileSize,则文件将以索引"%i"从0开始存档
             -->
            <fileNamePattern>${LOG_PATH}/log-debug-%d{yyyy-MM-dd HH:mm:ss}-%i.log.gz</fileNamePattern>
            <!-- 按照文件大小拆分 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>30</maxHistory>
            <!-- Total size of all archived files is at most 5GB -->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>

        <!-- 日志级别过滤规则: 日志文件只记录debug级别,不记录大于debug级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>




    <!-- 高性能异步日志:不会自己定义执行,而是指定引用摸一个具体的 appender 执行日志收集输出 -->
<!--
    <appender name="async-info" class="ch.qos.logback.classic.AsyncAppender">
        &lt;!&ndash; 引用指定某个具体的 appender &ndash;&gt;
        <appender-ref ref="INFO-FILE" />
    </appender>

    <appender name="async-warn" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="WARN-FILE" />
    </appender>

    <appender name="async-error" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="ERROR-FILE" />
    </appender>
-->


    <!--
        自定义模块日志打印:

        additivity - 设置为"true"才会继承并执行 root 中的日志记录器
        name - 需要修改为自己项目中的合适的package
     -->
    <logger name="com.wave" level="INFO" additivity="true">
        <!-- 生产环境请将STDOUT去掉!!! -->
        <appender-ref ref="CONSOLE" />

    </logger>

    <logger name="org.apache.ibatis" level="DEBUG" additivity="true">
        <!-- 生产环境请将STDOUT去掉!!! -->
        <appender-ref ref="CONSOLE" />

    </logger>

    <logger name="org.mybatis" level="DEBUG" additivity="true">
        <!-- 生产环境请将STDOUT去掉!!! -->
        <appender-ref ref="CONSOLE" />

    </logger>

    <!--spring log configure-->
    <logger name="org.springframework" level="info"/>
    <!--myibatis log configure-->
    <logger name="java.sql" level="DEBUG"/>
    <logger name="java.sql.Connection" level="DEBUG" />
    <logger name="java.sql.Statement" level="DEBUG" />
    <logger name="java.sql.PreparedStatement" level="DEBUG" />
    <logger name="org.apache.ibatis" level="DEBUG"/>
    <logger name="com.mysql.jdbc" level="DEBUG"/>
    <logger name="com.wave.dao" level="DEBUG"/>

    <!-- root logger : 如果需要关注性能,这里可以ref引入 异步日志的 appender,如:async-info -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="INFO-FILE" />
        <appender-ref ref="WARN-FILE" />
        <appender-ref ref="ERROR-FILE" />
    </root>


</configuration>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值