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
增加断点,调试信息如下图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?