Logback-spring.xml 配置详解
【代码】Logback-spring.xml 配置详解。
·
Logback-spring.xml 配置详解
配置文件结构
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 属性定义 -->
<property name="LOG_HOME" value="/logs"/>
<springProperty name="APP_NAME" source="spring.application.name"/>
<!-- 日志输出格式 -->
<property name="CONSOLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- Appender定义 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制台输出配置 -->
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件输出配置 -->
</appender>
<!-- Logger定义 -->
<logger name="com.example" level="DEBUG"/>
<!-- Root Logger -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
属性配置参数
<!-- 普通属性 -->
<property name="LOG_PATH" value="/var/log/myapp"/>
<property name="MAX_HISTORY" value="30"/>
<property name="MAX_FILE_SIZE" value="100MB"/>
<property name="TOTAL_SIZE_CAP" value="3GB"/>
<!-- Spring属性 -->
<springProperty name="LOG_LEVEL" source="logging.level.root" defaultValue="INFO"/>
<springProperty name="PROFILE" source="spring.profiles.active" defaultValue="dev"/>
<!-- 系统属性 -->
<property name="USER_HOME" value="${user.home}"/>
<property name="TEMP" value="${java.io.tmpdir}"/>
<!-- 条件属性 -->
<if condition='property("spring.profiles.active").contains("prod")'>
<then>
<property name="LOG_PATH" value="/opt/logs"/>
</then>
<else>
<property name="LOG_PATH" value="./logs"/>
</else>
</if>
日志输出格式参数
<!-- 完整格式示例 -->
<property name="PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} [%file:%line] - %msg%n"/>
<!-- 格式符号详解 -->
%d{pattern} # 日期时间
%thread # 线程名
%-5level # 日志级别
%logger{length} # Logger名称
%msg # 日志消息
%n # 换行符
%M # 方法名
%L # 行号
%F # 文件名
%c{length} # Logger名称(缩写)
%C{length} # 类名(全限定名)
%X{key} # MDC中的值
%ex # 异常堆栈
%highlight() # 高亮显示
%cyan() # 颜色输出
Appender配置参数
<!-- ConsoleAppender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<pattern>${CONSOLE_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${PATTERN}</pattern>
</layout>
<target>System.out</target>
<immediateFlush>true</immediateFlush>
</appender>
<!-- RollingFileAppender -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
Filter过滤器参数
<!-- LevelFilter -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- ThresholdFilter -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<!-- EvaluatorFilter -->
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>NOTIFY_ADMIN</marker>
</evaluator>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
Logger配置参数
<!-- Root Logger -->
<root level="${LOG_LEVEL:-INFO}">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<additivity>false</additivity>
</root>
<!-- 特定包/类Logger -->
<logger name="com.example.controller" level="DEBUG" additivity="false">
<appender-ref ref="CONTROLLER_FILE"/>
</logger>
<!-- 第三方框架Logger -->
<logger name="org.springframework" level="WARN"/>
<logger name="org.hibernate" level="ERROR"/>
<logger name="com.alibaba.druid" level="WARN"/>
<logger name="org.apache.kafka" level="INFO"/>
优化建议
- 使用
springProperty替代property以支持Spring环境变量 - 为不同环境(dev/test/prod)配置不同的日志级别和输出路径
- 使用
SizeAndTimeBasedRollingPolicy实现日志文件按时间和大小滚动 - 为关键业务包配置单独的Logger和Appender
- 在生产环境禁用DEBUG日志以提高性能
- 使用MDC(Mapped Diagnostic Context)添加请求ID等跟踪信息
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)