本文目录导读:

- 使用 application.yml/properties 配置(基础方式)
- 使用 logback-spring.xml(更强大的配置方式)
- 多环境配置(开发/生产)
- 在代码中使用日志
- 使用 Lombok 简化日志
- 配置说明
在Java Boot(Spring Boot)应用中配置日志输出,主要有以下几种常见方式:
使用 application.yml/properties 配置(基础方式)
application.yml 配置示例:
logging:
level:
root: INFO
com.example: DEBUG
org.springframework.web: ERROR
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file:
name: logs/application.log
path: logs/
max-size: 10MB
max-history: 30
charset:
console: UTF-8
file: UTF-8
application.properties 配置示例:
logging.level.root=INFO
logging.level.com.example=DEBUG
logging.level.org.springframework.web=ERROR
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logging.file.name=logs/application.log
logging.file.path=logs/
logging.file.max-size=10MB
logging.file.max-history=30
logging.charset.console=UTF-8
logging.charset.file=UTF-8
使用 logback-spring.xml(更强大的配置方式)
在 src/main/resources 下创建 logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义变量 -->
<property name="LOG_PATH" value="./logs"/>
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 文件输出 - 按天滚动 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/application-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 错误日志单独输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>500MB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 异步输出,提升性能 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="FILE"/>
</appender>
<!-- 设置日志级别 -->
<logger name="com.example" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ASYNC"/>
<appender-ref ref="ERROR_FILE"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ASYNC"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>
多环境配置(开发/生产)
application-dev.yml
logging:
level:
root: DEBUG
pattern:
console: "%clr(%d{yyyy-MM-dd HH:mm:ss}){cyan} %clr([%thread]){yellow} %clr(%-5level){magenta} %clr(%logger{36}){blue} - %msg%n"
application-prod.yml
logging:
level:
root: WARN
com.example: INFO
file:
name: /var/log/application.log
max-size: 50MB
max-history: 90
在代码中使用日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public void getUser(Long id) {
logger.debug("查询用户信息,ID: {}", id);
try {
// 业务逻辑
logger.info("用户查询成功,ID: {}", id);
} catch (Exception e) {
logger.error("用户查询失败,ID: {}", id, e);
}
}
}
使用 Lombok 简化日志
添加 Lombok 依赖后:
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class UserService {
public void getUser(Long id) {
log.debug("查询用户信息,ID: {}", id);
log.info("用户查询成功,ID: {}", id);
log.error("用户查询失败,ID: {}", id, exception);
}
}
配置说明
| 配置项 | 说明 | 推荐值 |
|---|---|---|
| logging.level | 设置日志级别 | 开发用DEBUG,生产用INFO |
| logging.pattern | 日志输出格式 | 包含时间、线程、级别、类名、消息 |
| logging.file | 日志文件配置 | 设置文件名、路径、大小、保留天数 |
| 控制台输出 | 开发环境方便调试 | 带颜色格式 |
| 文件输出 | 生产环境记录 | 按天滚动,自动清理 |
选择哪种方式取决于你的项目需求,简单的项目用 application.yml 就够了,复杂的项目推荐使用 logback-spring.xml。