Java应用的日志路径通常由开发者配置,常见位置包括/var/log/、/opt/app/logs/、~/logs/(相对路径)或应用配置文件中指定(如Spring Boot的application.properties通过logging.file.name设置)。常用命令:
ps -ef | grep java:查看Java进程PID及启动参数,确认日志路径;find / -name "*.log":全局搜索.log文件(需root权限,避免扫描系统关键目录)。tail -f /path/to/logfile.log(持续输出新增内容);结合-n参数限制行数(如tail -n 100 -f查看最后100行);grep "ERROR" logfile.log(查找错误日志);grep -E "ERROR|Exception" logfile.log(正则匹配多个关键词);less logfile.log(支持上下翻页、/keyword搜索、q退出)。2025-08-02 11:00:00 INFO [main] com.example.App - Started),用awk '{print $1, $2, $3}' logfile.log提取前三列(时间、级别、线程);sed '/INFO/d' logfile.log(删除所有INFO级别日志);sed 's/password=123456/password=****/g' logfile.log(替换日志中的密码等敏感内容)。若Java应用通过systemd运行(如Tomcat、Spring Boot jar包),使用journalctl命令:
journalctl -u your-java-service-name(-u指定服务名);journalctl -u your-java-service-name -f;journalctl -u your-java-service-name --since "2025-09-18 00:00:00" --until "2025-09-19 00:00:00"(查看指定时间段日志)。使用logrotate工具自动轮转、压缩旧日志,配置文件通常位于/etc/logrotate.d/。示例配置(针对application.log):
/path/to/application.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志(如.gz格式)
missingok # 文件不存在不报错
notifempty # 日志为空不轮转
copytruncate # 复制原日志后清空(不影响应用写入)
}
可通过cat /etc/logrotate.conf查看全局配置。
jstack <PID> > thread_dump.txt生成线程快照,分析是否有线程阻塞在日志相关操作(如log4j的OutputStreamManager.flush);async-profiler采集CPU热点,生成cpu_profile.html查看日志模块占用CPU比例(如日志打印占40% CPU需优化);INFO级别,避免DEBUG;使用isDebugEnabled()检查后再打印详细日志(如if (logger.isDebugEnabled()) { logger.debug("Detailed info: {}", obj); });for循环中打印大量日志(如遍历1000次打印1000条),改为批量记录或汇总后输出。log4j/logback的SocketAppender或Filebeat传输);Log4j/Logback的自定义Formatter(如包含时间戳、线程ID、类名、方法名),便于后续分析;grep -r "logger.debug" src/查找未关闭的DEBUG日志,grep -r -E "for\s*\(.*\)\s*\{.*logger\.(debug|info)" src/查找循环内日志);Prometheus+Granafa监控日志文件增长速度、目录磁盘使用量、日志线程CPU占用,及时预警异常。