本文目录导读:

- Logback(Spring Boot默认)
- Log4j2
- Java Util Logging (JUL)
- 程序化配置(Logback示例)
- Spring Boot 动态修改日志级别(运行时)
- 日志级别详解
- 配置建议
在Java中配置日志级别有多种方式,具体取决于你使用的日志框架,以下是几种主流日志框架的配置方法:
Logback(Spring Boot默认)
logback.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 全局日志级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<!-- 特定包/类的日志级别 -->
<logger name="com.example.controller" level="DEBUG"/>
<logger name="com.example.service" level="WARN"/>
<logger name="com.example.dao" level="ERROR"/>
<!-- 控制台输出 -->
<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>
</configuration>
application.yml 配置(Spring Boot)
logging:
level:
root: INFO
com.example.controller: DEBUG
com.example.service: WARN
com.example.dao: ERROR
Log4j2
log4j2.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<!-- 全局日志级别 -->
<Root level="INFO">
<AppenderRef ref="Console"/>
</Root>
<!-- 特定包/类的日志级别 -->
<Logger name="com.example.controller" level="DEBUG" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="com.example.service" level="WARN"/>
<Logger name="com.example.dao" level="ERROR"/>
</Loggers>
</Configuration>
Java Util Logging (JUL)
logging.properties
# 全局日志级别 .level=INFO # 特定包/类的日志级别 com.example.controller.level=FINE com.example.service.level=WARNING com.example.dao.level=SEVERE # 处理器配置 handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=ALL java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
程序化配置(Logback示例)
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import org.slf4j.LoggerFactory;
public class LogConfigExample {
public static void main(String[] args) {
// 获取根日志记录器
Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.setLevel(Level.INFO);
// 设置特定类的日志级别
Logger controllerLogger = (Logger) LoggerFactory.getLogger("com.example.controller");
controllerLogger.setLevel(Level.DEBUG);
// 动态调整日志级别
Logger serviceLogger = (Logger) LoggerFactory.getLogger("com.example.service");
serviceLogger.setLevel(Level.WARN);
}
}
Spring Boot 动态修改日志级别(运行时)
import org.springframework.boot.logging.LogLevel;
import org.springframework.boot.logging.LoggingSystem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/logs")
public class LogLevelController {
@Autowired
private LoggingSystem loggingSystem;
@PostMapping("/level")
public String setLogLevel(@RequestParam String packageName,
@RequestParam String level) {
loggingSystem.setLogLevel(packageName, LogLevel.valueOf(level.toUpperCase()));
return "Log level for " + packageName + " set to " + level;
}
}
日志级别详解
Logback/Log4j2 日志级别(从低到高)
| 级别 | 说明 |
|---|---|
| TRACE | 最详细的调试信息 |
| DEBUG | 调试信息 |
| INFO | 一般信息 |
| WARN | 警告信息 |
| ERROR | 错误信息 |
JUL 日志级别
| 级别 | 说明 |
|---|---|
| FINEST | 最详细 |
| FINER | 较详细 |
| FINE | 详细 |
| CONFIG | 配置信息 |
| INFO | 一般信息 |
| WARNING | 警告 |
| SEVERE | 严重 |
配置建议
- 开发环境:建议使用
DEBUG级别,以便获取更多调试信息 - 测试环境:建议使用
INFO或DEBUG级别 - 生产环境:建议使用
INFO或WARN级别,避免过多日志影响性能 - 关键业务:可以对特定包或类单独设置更低的日志级别
选择哪种方式取决于你的项目需求和使用的框架,Spring Boot项目推荐使用application.yml配置,传统项目可以使用XML配置文件。