Linux下Java日志如何配置
导读:Linux下Java日志配置全流程 一 选择日志框架与放置配置 常见方案与适用场景 SLF4J + Logback:SLF4J为门面,Logback为默认高性能实现,配置简单、功能完备,适合大多数项目。 Log4j 2:性能与功能强,支...
Linux下Java日志配置全流程
一 选择日志框架与放置配置
- 常见方案与适用场景
- SLF4J + Logback:SLF4J为门面,Logback为默认高性能实现,配置简单、功能完备,适合大多数项目。
- Log4j 2:性能与功能强,支持异步、过滤器等,适合复杂或高吞吐场景。
- JUL(java.util.logging):JDK自带,轻量,适合对外部依赖敏感的环境。
- 配置文件放置与加载
- 将配置文件放在classpath 根目录(如 Maven/Gradle 工程的src/main/resources)。
- 常见命名:logback.xml、log4j2.xml、logging.properties(JUL)。应用启动时会自动加载同名配置。
二 常用框架最小可用配置示例
- SLF4J + Logback(推荐)
- Maven依赖
< dependency> < groupId> org.slf4j< /groupId> < artifactId> slf4j-api< /artifactId> < version> 1.7.36< /version> < /dependency> < dependency> < groupId> ch.qos.logback< /groupId> < artifactId> logback-classic< /artifactId> < version> 1.2.13< /version> < /dependency> - src/main/resources/logback.xml
< configuration> < appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> < encoder> < pattern> %d{ yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{ 36} - %msg%n< /pattern> < /encoder> < /appender> < appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> < file> logs/app.log< /file> < rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> < fileNamePattern> logs/app.%d{ yyyy-MM-dd} .log< /fileNamePattern> < maxHistory> 30< /maxHistory> < /rollingPolicy> < encoder> < pattern> %d{ yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{ 36} - %msg%n< /pattern> < /encoder> < /appender> < root level="INFO"> < appender-ref ref="CONSOLE"/> < appender-ref ref="FILE"/> < /root> < /configuration>
- Maven依赖
- Log4j 2
- Maven依赖
< dependency> < groupId> org.apache.logging.log4j< /groupId> < artifactId> log4j-core< /artifactId> < version> 2.20.0< /version> < /dependency> < dependency> < groupId> org.apache.logging.log4j< /groupId> < artifactId> log4j-api< /artifactId> < version> 2.20.0< /version> < /dependency> - src/main/resources/log4j2.xml
< ?xml version="1.0" encoding="UTF-8"?> < Configuration status="WARN"> < Appenders> < Console name="Console" target="SYSTEM_OUT"> < PatternLayout pattern="%d{ yyyy-MM-dd HH:mm:ss} %-5p %c{ 1} :%L - %msg%n"/> < /Console> < File name="File" fileName="logs/app.log"> < PatternLayout pattern="%d{ yyyy-MM-dd HH:mm:ss} %-5p %c{ 1} :%L - %msg%n"/> < /File> < /Appenders> < Loggers> < Root level="INFO"> < AppenderRef ref="Console"/> < AppenderRef ref="File"/> < /Root> < /Loggers> < /Configuration>
- Maven依赖
- JUL(java.util.logging)
- 配置 src/main/resources/logging.properties
handlers= java.util.logging.ConsoleHandler, java.util.logging.FileHandler .level= INFO java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.FileHandler.level = INFO java.util.logging.FileHandler.pattern = logs/app.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter - 启动时指定:
-Djava.util.logging.config.file=classpath:logging.properties。
- 配置 src/main/resources/logging.properties
三 Linux系统层面的日志轮转与输出管理
- 使用 logrotate 做按天/按大小滚动、压缩与保留
- 新建配置:/etc/logrotate.d/myapp
/opt/myapp/logs/*.log { daily rotate 7 compress missingok notifempty create 640 appuser appgroup sharedscripts postrotate systemctl reload myapp.service > /dev/null 2> & 1 || true endscript } - 测试与生效:
logrotate -vf /etc/logrotate.d/myapp
- 新建配置:/etc/logrotate.d/myapp
- 以 systemd 服务运行并重定向标准输出
- /etc/systemd/system/myapp.service
[Unit] Description=My Java App After=network.target [Service] ExecStart=/usr/bin/java -jar /opt/myapp/app.jar StandardOutput=append:/opt/myapp/logs/stdout.log StandardError=append:/opt/myapp/logs/stderr.log User=appuser Group=appgroup Restart=on-failure [Install] WantedBy=multi-user.target - 使配置生效:
systemctl daemon-reload & & systemctl enable --now myapp
- /etc/systemd/system/myapp.service
- 传统方式(不使用 systemd)
- 前台输出到文件:
nohup java -jar app.jar > run.out 2> & 1 & - 仅输出错误:
nohup java -jar app.jar > /dev/null 2> & 1 &
- 前台输出到文件:
四 运行与维护命令
- 实时查看日志
- 应用日志:
tail -f logs/app.log - 控制台输出:
tail -f logs/stdout.log
- 应用日志:
- 按时间查看:
grep "2026-01-04" logs/app.log - 按级别筛选:
grep " ERROR " logs/app.log - 查看进程与日志占用:
ps -ef | grep java、lsof | grep logs
五 最佳实践与排错要点
- 使用SLF4J门面解耦代码与实现;在开发与生产可采用不同实现而无需改代码。
- 统一日志格式(时间、级别、线程、类名/行号等),便于检索与分析。
- 合理设置日志级别:开发环境用DEBUG,生产建议INFO/WARN,避免过量日志影响性能。
- 启用异步日志(Log4j 2、Logback均支持)以提升高并发场景吞吐。
- 配置滚动与保留策略(按天/按大小、压缩、保留天数),防止磁盘被占满。
- 避免依赖System.out/err;使用日志框架输出结构化信息(如MDC/请求ID)。
- 注意权限与目录:确保运行用户对日志目录有写权限;建议使用绝对路径。
- 依赖冲突排查:避免同时存在多套日志实现(如 log4j-to-slf4j 与 log4j-slf4j-impl 冲突),保持桥接链条单一。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux下Java日志如何配置
本文地址: https://pptw.com/jishu/787077.html
