You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Java Util Logging以输出Log4j风格的日志格式?

实现类Log4j的自定义日志格式

需求格式回顾

目标输出格式:

2014-09-24 14:05:18 INFO  CustomerController:96 - Starting purchase order...

对应要求:

  • 单条日志独占一行
  • 本地时间戳(不含时区)
  • 级别左对齐,固定5字符长度(如INFO补空格为INFO )
  • 显示类名(不含包路径)及行号
  • 日志消息后缀

以下提供两种无需额外外部文件的实现方式:


1. 配置文件方式

Logback 配置(src/main/resources/logback.xml)

将配置文件打包进JAR即可生效:

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %C{1}:%L - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

占位符说明:

  • %d{yyyy-MM-dd HH:mm:ss}:生成无时区的本地时间戳
  • %-5level:左对齐级别,强制占5字符宽度
  • %C{1}:仅提取类名(去除包路径)
  • :%L:追加代码行号
  • %msg%n:输出日志内容并换行

Log4j2 配置(src/main/resources/log4j2.xml)

若使用Log4j2,配置方式类似:

<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %C{1}:%L - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

2. 编程式配置(Logback 示例)

通过Java代码动态配置,无需依赖外部配置文件:

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.ConsoleAppender;
import org.slf4j.LoggerFactory;

public class LogInitializer {
    public static void initCustomLogging() {
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
        
        // 初始化控制台输出Appender
        ConsoleAppender consoleAppender = new ConsoleAppender();
        consoleAppender.setContext(context);
        consoleAppender.setName("CustomConsoleAppender");
        
        // 配置格式编码器
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setContext(context);
        encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss} %-5level %C{1}:%L - %msg%n");
        encoder.start();
        
        consoleAppender.setEncoder(encoder);
        consoleAppender.start();
        
        // 绑定到根日志
        Logger rootLogger = context.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
        rootLogger.addAppender(consoleAppender);
        rootLogger.setLevel(ch.qos.logback.classic.Level.INFO);
    }
}

在项目启动入口(如main方法)调用LogInitializer.initCustomLogging()即可生效。


注意点

  • 行号%L会引入一定性能损耗,若对性能敏感可移除该配置
  • 若项目启用代码混淆,%C{1}可能显示混淆后的类名,可替换为%logger{1}以获得相同效果

内容的提问来源于stack exchange,提问作者Joe DiNottra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:05:16