Logback 基础应用

Logback 基础应用

Logback 中文文档

1、示例配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--定义变量值从Spring Context获取-->
    <springProperty name="app.name" scope="context" source="spring.application.name" defaultValue="app"/>
    <springProperty name="log.file" scope="context" source="logging.file"/>
    <springProperty name="log.path" scope="context" source="logging.path"/>

    <!--日志存储路径-->
    <property name="FILE_PATH" value="${log.path:-${user.home}/${app.name}}"/>

    <!--Appender一定要放到引用前面,是有先后顺序的-->
    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--日志文件名称默认值:${app.name}-->
    <property name="FILE_INFO_NAME" value="${log.file:-${app.name}.log}"/>
    <!--日志文件完整路径-->
    <property name="FILE_INFO_FILE" value="${FILE_PATH}/${FILE_INFO_NAME}"/>
    <!-- 定义INFO级别APPENDER -->
    <appender name="FILE_INFO_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${FILE_INFO_FILE}</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${FILE_INFO_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <!--日志文件保留数量-->
            <maxHistory>30</maxHistory>
            <!--当天日志文件大于100MB切换新文件,如果当天超过了则会在文件后(%i)添加序号从0开始-->
            <maxFileSize>100MB</maxFileSize>
            <!--最多保留3GB-->
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] [traceId:%X{traceId}] %logger{36} [%class:%line] - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--日志文件名称默认值:${app.name}-->
    <property name="FILE_RUN_ERROR_NAME" value="${log.file:-${app.name}.log}_error.log"/>
    <!--日志文件完整路径-->
    <property name="FILE_RUN_ERROR_FILE" value="${FILE_PATH}/${FILE_RUN_ERROR_NAME}"/>
    <!-- 定义INFO级别APPENDER -->
    <appender name="FILE_RUN_ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${FILE_RUN_ERROR_FILE}</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${FILE_RUN_ERROR_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <!--日志文件保留数量-->
            <maxHistory>20</maxHistory>
            <!--当天日志文件大于100M切换新文件,如果当天超过了则会在文件后(%i)添加序号从0开始-->
            <maxFileSize>100MB</maxFileSize>
            <!--最多保留2GB-->
            <totalSizeCap>2GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] [traceId:%X{traceId}] %logger{36} [%class:%line] - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!--不匹配直接拒绝,后续过滤器也不会执行-->
            <onMismatch>DENY</onMismatch>
            <!--匹配则继续交由其他过滤器-->
            <onMatch>NEUTRAL</onMatch>
        </filter>
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
                <expression>
                    <![CDATA[
                        return throwableProxy != null && !throwableProxy.getClassName().contains("BusinessException");
                    ]]>
                </expression>
            </evaluator>
            <OnMismatch>DENY</OnMismatch>
            <!--匹配则进行写入-->
            <OnMatch>ACCEPT</OnMatch>
        </filter>
    </appender>

    <logger name="org.springframework" level="INFO"/>

    <!-- local 环境-->
    <springProfile name="local">
        <logger name="org.mybatis" level="DEBUG"/>
        <logger name="com.baomidou.mybatisplus" level="DEBUG"/>

        <root level="DEBUG">
            <appender-ref ref="CONSOLE_APPENDER"/>
        </root>
    </springProfile>

    <!-- dev,sit,uat,prod 环境-->
    <springProfile name="dev,sit,uat,prod">
        <logger name="org.mybatis" level="INFO"/>
        <logger name="com.baomidou.mybatisplus" level="INFO"/>

        <root level="INFO">
            <appender-ref ref="FILE_INFO_APPENDER"/>
            <appender-ref ref="FILE_RUN_ERROR_APPENDER"/>
        </root>
    </springProfile>
</configuration>

2、过滤异常

上面示例中用到了 JaninoEventEvaluator 过滤器,用来过滤程序异常单独额外记录到日志文件中,便于收集排查错误日志。需要额外增加依赖包:

<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.1.12</version>
</dependency>

具体如何配置可以参照文档,或者直接启动调试看里面有哪些属性,就知道怎么写了,例如:ch.qos.logback.classic.boolex.JaninoEventEvaluator 方法 evaluate 增加断点,调试信息如下图:

image

posted @   半夜起来撸代码  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示