可以自定义
在 Ubuntu 上,Java 日志格式完全由应用使用的日志框架决定(与操作系统无关)。你可以选择 java.util.logging(JUL)、Log4j 1.x/2.x、Logback(SLF4J 实现) 等主流框架,并通过配置文件或代码设置输出格式、字段与布局,例如时间戳、级别、类名、方法名、行号、线程、MDC 等。下面给出可直接使用的配置示例与要点。
常用框架与最小配置示例
-
JUL(java.util.logging)
- 使用配置文件 logging.properties:
- 关键项:设置 handlers、为 FileHandler/ConsoleHandler 指定 formatter 与 pattern。
- 示例 pattern:
%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %2$s %5$s%6$s%n(时间、级别、类名、方法名、消息)。
- 或在代码中为 Handler 设置自定义 Formatter 子类,灵活控制格式与内容。
-
Log4j 1.x
- 使用 log4j.properties:
- 配置 ConsoleAppender/FileAppender,指定 layout=org.apache.log4j.PatternLayout。
- 示例 ConversionPattern:
%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n(时间、级别、短类名、行号、消息)。
-
Log4j 2.x
- 使用 log4j2.xml:
- 在 Console/File Appender 中使用 PatternLayout 定义 pattern,字段同上,支持丰富的转换字符与结构化数据。
-
Logback(配合 SLF4J)
- 使用 logback.xml:
- 在 Console/File/RollingFile Appender 的 encoder 中设置 ,如:
%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n;支持按时间/大小滚动与保留策略。
进阶 输出到 Ubuntu 系统日志并自定义格式
- 将日志发送到 rsyslog/syslog(便于集中采集与对接 ELK/Graylog):
- 在 Ubuntu 上启用 rsyslog(如开放 UDP 514,定义 JSON 模板),并按 programname/syslogtag 分流到独立文件(如 /var/log/testlogj/testlogj.log)。
- 在 Log4j2 中配置 SyslogAppender(或 SocketAppender)指向 rsyslog,即可按 rsyslog 模板输出(如 RFC5424/JSON)。
实用建议
- 统一项目中的日志门面与实现(如 SLF4J + Logback),避免多框架并存导致格式与性能不可控。
- 在 pattern 中显式输出关键字段(如 时间、级别、线程、logger、方法/行号、traceId/MDC),便于检索与链路追踪。
- 生产环境优先使用 异步 Appender 与 按时间/大小滚动策略,控制日志体积与 I/O 影响。
- 若需对接集中式平台,优先输出 结构化格式(JSON),减少后续解析成本。