发布于2026-07-04 阅读(0)
扫一扫,手机访问
Ubuntu系统中Ja va日志管理,这事儿说难不难,但真要上手,从框架选型到轮转配置再到集中化方案,每一步都有不少坑。今天就把这些经验系统地捋一遍,从基础到进阶,一次性讲清楚。

选择日志框架是第一步。目前市面上主流的就那么几个:Log4j功能灵活但已不是最新,SLF4J只是个门面,得搭配Logback或Log4j等实现;Logback算是Log4j的继任者,性能和功能都更胜一筹;如果只是简单场景,ja va.util.logging(JDK自带的)也能凑合用。配置文件是核心,通常放在项目的src/main/resources目录下,或者系统级路径比如/etc/。
log4j.properties或log4j.xml配置。可以指定输出路径(如logs/app.log)、输出格式(如%d{ISO8601} [%t] %-5p %c - %m%n)、滚动策略(如MaxFileSize=10MB,MaxBackupIndex=5)。logback.xml,支持异步日志这类高级功能。一个典型的配置示例如下:
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logs/app.log
logs/app.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
LoggerFactory.getLogger(Class)获取日志记录器就行。日志文件放哪儿,完全由框架配置说了算。常见的几个路径:
/path/to/project/logs/app.log,直接在框架配置文件里指定。/var/log/ja va/(系统级Ja va应用日志),或者/var/log/tomcatX/(Tomcat下的Ja va应用日志,X是版本号)。System.getProperty("user.dir")获取当前目录,日志通常放在该目录下的logs子目录里。Ubuntu下查看和管理日志的命令行工具相当丰富:
tail -f /path/to/logfile.log,实时输出最新内容,适合监控。grep "ERROR" /path/to/logfile.log,筛选包含“ERROR”的行,支持正则。less /path/to/logfile.log,逐页查看大文件,支持上下翻页和/keyword搜索。journalctl -u serviceName,查看指定服务(如tomcat)的日志,前提是系统使用systemd。日志文件如果不加控制,很快就会撑爆磁盘。好在Ubuntu默认安装了Logrotate这个轮转工具,可以自动压缩和删除旧日志。
sudo apt update && sudo apt install logrotate。/etc/logrotate.d/下新建一个应用专属文件,比如my-ja va-app。示例如下:/var/log/myapp/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7份日志
compress # 压缩旧日志(.gz格式)
delaycompress # 延迟压缩,避免当天日志被压缩
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root root # 创建新日志文件的权限和所有者
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
/bin/kill -HUP $(cat /var/run/myapp.pid 2>/dev/null) 2>/dev/null || true # 通知应用重新打开日志文件
endscript
}
sudo logrotate -vf /etc/logrotate.d/my-ja va-app,强制运行并查看效果。如果系统是分布式的,或者有多个应用,分散的日志管理起来太痛苦。这时候ELK Stack(Elasticsearch + Logstash + Kibana)就是标准答案,可以实现集中收集、存储、分析和可视化。
sudo apt update && sudo apt install elasticsearch logstash kibana。logstash.conf文件,定义输入(比如用file插件读取Ja va日志)、过滤(用grok解析日志格式)、输出(存到Elasticsearch)。示例如下:input {
file {
path => "/var/log/myapp/*.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} [%{THREAD:thread}] %{LOGLEVEL:loglevel} %{JA VACLASS:class} - %{GREEDYDATA:logmessage}" }
}
date {
match => [ "timestamp", "ISO8601" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
stdout { codec => rubydebug } # 控制台输出,调试用
}
sudo systemctl start elasticsearch && sudo systemctl start logstash && sudo systemctl start kibana。http://localhost:5601,配置索引模式(比如logstash-*),就能可视化和分析日志了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8