Linux下Java日志管理实用技巧
一 架构与总体策略
二 应用内日志框架配置要点
<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>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.TimeBasedSizeTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line - %msg%n</pattern>
</encoder>
</appender>
<root level="info"><appender-ref ref="FILE"/></root>
三 系统侧日志轮转与清理
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 app app
dateext
postrotate
/usr/bin/systemctl kill -s HUP rsyslogd >/dev/null 2>&1 || true
endscript
}
logrotate -d /etc/logrotate.d/myapp 做语法校验,logrotate -f /etc/logrotate.d/myapp 强制触发一次轮转,便于上线前验证。四 集中式日志与系统日志联动
五 日常运维命令与应急
tail -f app.log 实时查看;tail -n 100 -f app.log | grep --color=auto "ERROR" 先展示最近 100 行再跟踪错误;grep -E "Exception|ERROR" app.log 多关键字检索;awk '{print $4}' app.log | sort | uniq -c | sort -nr | head 统计高频错误码/接口。split -b 100M app.log app_split_ 按 100MB 切块便于传输与归档;若需按日期归档,可结合 cron 与脚本将历史日志迁入日期目录。journalctl -u myapp.service -f 实时查看某服务日志;journalctl -u myapp.service --since "2025-11-23 10:00:00" 按时间检索;journalctl -u myapp.service -p err 只看错误级别。