Java在CentOS上的日志管理指南
ps -ef | grep java命令列出所有运行中的Java进程,获取进程ID(PID)以便后续操作。application.properties中logging.file.name=logs/application.log,Tomcat的catalina.out),需根据项目配置确认。tail -f /path/to/logfile.log命令实时监控日志文件的最新内容,便于跟踪程序运行状态。grep "ERROR" /path/to/logfile.log命令过滤日志中的错误信息,快速定位问题;可使用grep -i "keyword"忽略大小写,或grep -A 5 "error"显示匹配行及后5行上下文。使用CentOS自带的logrotate工具实现日志自动切割、压缩和归档,防止单个日志文件占用过多磁盘空间。
/etc/logrotate.d/目录下新建Java日志配置文件(如java_logs),内容示例如下:/path/to/java/logs/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7个备份
compress # 压缩旧日志(如.gz格式)
missingok # 忽略缺失的日志文件
notifempty # 非空文件才轮转
create 0644 root root # 创建新日志文件并设置权限
postrotate # 轮转后执行的命令(可选)
/usr/bin/kill -HUP `cat /var/run/logrotate.pid` 2>/dev/null || true
endscript
}
logrotate -vf /etc/logrotate.d/java_logs命令,验证配置是否正确。Java应用常用Logback(推荐,与SLF4J集成)或Log4j2作为日志框架,通过配置文件定义日志级别、输出格式和存储路径。
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>["是", "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n", "%msg%n"]
</encoder>
</appender>
<!-- 文件输出(带滚动策略) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/java_app/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/java_app/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留30天日志 -->
</rollingPolicy>
<encoder>
<pattern>["是", "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n"]
</encoder>
</appender>
<!-- 设置根日志级别(DEBUG/INFO/WARN/ERROR) -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
<?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 - %m%n"/>
</Console>
<RollingFile name="File" fileName="/var/log/java_app/app.log"
filePattern="/var/log/java_app/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!-- 每天滚动 -->
<SizeBasedTriggeringPolicy size="10 MB"/> <!-- 超过10MB滚动 -->
</Policies>
<DefaultRolloverStrategy max="30"/> <!-- 保留30个备份 -->
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
DEBUG捕获详细信息,生产环境用INFO或WARN减少日志量),例如在logback.xml中将<root level="INFO">改为<root level="DEBUG">。对于分布式系统或多节点Java应用,使用**ELK Stack(Elasticsearch+Logstash+Kibana)**实现日志集中收集、存储和分析:
systemctl start elasticsearch),用于存储和索引日志数据;java_log.conf),定义输入(如从文件读取)、过滤(如解析JSON格式)和输出(发送到Elasticsearch);systemctl start kibana),通过Web界面可视化日志数据(如创建仪表盘展示错误日志趋势)。logstash-log4j2-encoder),将日志直接发送到Logstash;或通过rsyslog将日志转发到Logstash。#!/bin/bash
LOG_DIR="/var/log/java_app"
BACKUP_DIR="/path/to/backup"
DATE=$(date -d "yesterday" +%Y%m%d)
# 备份日志
cp $LOG_DIR/*.log $BACKUP_DIR/java_app_$DATE.log
# 清空原始日志
> $LOG_DIR/*.log
# 删除30天前的备份
find $BACKUP_DIR -name "java_app_*.log" -mtime +30 -exec rm -f {} \;
crontab -e命令添加定时任务,例如每天凌晨1点执行备份脚本:0 1 * * * /path/to/backup_script.sh
compress和maxage参数(如compress压缩旧日志,maxage 30删除30天前的备份),可与定时脚本互补使用。