您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Logback配置文件怎么写
## 一、Logback简介
Logback是Java社区中最流行的日志框架之一,作为Log4j的继承者,由同一作者开发。它由三个模块组成:
- logback-core(基础模块)
- logback-classic(实现了SLF4J API)
- logback-access(与Servlet容器集成)
### 1.1 Logback的优势
- **性能提升**:比Log4j执行速度更快,内存占用更小
- **自动重载配置**:支持配置文件修改后自动重新加载
- **丰富的过滤功能**:提供多种灵活的过滤机制
- **上下文数据**:支持MDC(Mapped Diagnostic Context)
- **多种配置方式**:支持XML、Groovy和编程方式配置
## 二、基础配置文件结构
Logback的标准配置文件名为`logback.xml`,需要放在classpath根目录下。基本结构如下:
```xml
<configuration>
<!-- 属性定义 -->
<property name="LOG_DIR" value="/var/logs/myapp" />
<!-- Appender配置 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Logger配置 -->
<logger name="com.example" level="DEBUG" />
<!-- Root Logger配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
可以在配置文件中定义变量,便于复用:
<!-- 简单属性 -->
<property name="LOG_DIR" value="/var/logs" />
<!-- 从系统环境变量获取 -->
<property name="LOG_LEVEL" value="${LOG_LEVEL:-INFO}" />
<!-- 从配置文件获取 -->
<property resource="application.properties" />
<!-- 使用条件判断 -->
<if condition='property("os.name").contains("Windows")'>
<then>
<property name="LOG_DIR" value="C:/logs" />
</then>
<else>
<property name="LOG_DIR" value="/var/logs" />
</else>
</if>
Appender负责定义日志输出目的地:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<target>System.out</target> <!-- 默认为System.err -->
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_DIR}/myapp.log</file>
<append>true</append>
<encoder>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</encoder>
</appender>
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="ROLLING_SIZE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/size-roll.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/size-roll.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</encoder>
</appender>
Encoder负责日志事件的格式化:
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>UTF-8</charset>
<immediateFlush>true</immediateFlush>
</encoder>
常用模式符号:
- %d
- 日期时间
- %thread
- 线程名
- %-5level
- 日志级别(左对齐,固定5字符)
- %logger
- Logger名称
- %msg
- 日志消息
- %n
- 换行符
- %X{key}
- MDC中的值
Logger用于控制不同包的日志级别:
<!-- 特定包或类的Logger -->
<logger name="com.example.dao" level="DEBUG" additivity="false">
<appender-ref ref="DAO_FILE" />
</logger>
<!-- 第三方库的Logger -->
<logger name="org.hibernate" level="WARN" />
<logger name="org.springframework" level="INFO" />
Root Logger是所有Logger的父级:
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<if condition='property("env").equals("dev")'>
<then>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</then>
<else>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</else>
</if>
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>512</queueSize>
<discardingThreshold>0</discardingThreshold>
<includeCallerData>true</includeCallerData>
<appender-ref ref="FILE" />
</appender>
<appender name="EML" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>smtp.example.com</smtpHost>
<smtpPort>587</smtpPort>
<username>user@example.com</username>
<password>password</password>
<to>admin@example.com</to>
<from>noreply@example.com</from>
<subject>ERROR: %logger{20} - %m</subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d %-5level %logger{35} - %message%n</pattern>
</layout>
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>10</bufferSize>
</cyclicBufferTracker>
<triggeringPolicy class="ch.qos.logback.classic.boolex.OnErrorEvaluator" />
</appender>
<conversionRule conversionWord="user"
converterClass="com.example.CustomConverter" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %user %msg%n</pattern>
</encoder>
</appender>
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="EML" />
</root>
</springProfile>
immediateFlush="true"
includeCallerData
fileNamePattern
中的日期模式additivity
属性<configuration scan="true" scanPeriod="30 seconds">
<!-- 环境变量 -->
<property name="APP_NAME" value="my-application" />
<property name="LOG_DIR" value="/var/log/${APP_NAME}" />
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n</pattern>
</encoder>
</appender>
<!-- 主日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/app.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 错误日志单独输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/error.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 异步日志 -->
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>1024</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="FILE" />
</appender>
<!-- Logger配置 -->
<logger name="com.example" level="DEBUG" />
<logger name="org.springframework" level="WARN" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<!-- Root Logger -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
Logback提供了强大而灵活的日志配置能力,通过合理的配置可以: 1. 实现精细化的日志级别控制 2. 优化日志输出性能 3. 方便地进行日志文件管理 4. 适应不同的运行环境需求
掌握Logback配置是Java开发者必备的技能,良好的日志实践可以大大提高应用程序的可维护性和问题排查效率。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。