Java案例如何配置日志级别?

wen java案例 15

本文目录导读:

Java案例如何配置日志级别?

  1. Logback(Spring Boot默认)
  2. Log4j2
  3. Java Util Logging (JUL)
  4. 程序化配置(Logback示例)
  5. Spring Boot 动态修改日志级别(运行时)
  6. 日志级别详解
  7. 配置建议

在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 严重

配置建议

  1. 开发环境:建议使用DEBUG级别,以便获取更多调试信息
  2. 测试环境:建议使用INFODEBUG级别
  3. 生产环境:建议使用INFOWARN级别,避免过多日志影响性能
  4. 关键业务:可以对特定包或类单独设置更低的日志级别

选择哪种方式取决于你的项目需求和使用的框架,Spring Boot项目推荐使用application.yml配置,传统项目可以使用XML配置文件。

抱歉,评论功能暂时关闭!