温馨提示×

centos如何收集java日志

小樊
48
2026-09-09 02:47:39
栏目: 编程语言

在 CentOS 上收集 Java 日志,常见做法取决于 Java 应用如何输出日志(控制台、日志框架、systemd、容器等)。下面按场景给你一套实用方案。


一、Java 应用直接输出到控制台(最常见)

1. 使用 nohup 启动并收集日志

nohup java -jar app.jar > app.log 2>&1 &
  • app.log:收集标准输出和错误
  • 查看日志:
tail -f app.log

二、使用 systemd 管理 Java 服务(推荐生产环境)

1. 创建 service 文件

vi /etc/systemd/system/app.service

示例:

[Unit]
Description=Java App
After=network.target

[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/app/app.jar
SuccessExitStatus=143
Restart=on-failure

[Install]
WantedBy=multi-user.target

2. 启动服务

systemctl daemon-reload
systemctl start app
systemctl enable app

3. 收集日志(systemd 自动管理)

journalctl -u app -f

导出日志:

journalctl -u app --since "2024-01-01" > app.log

三、Java 使用日志框架(Logback / Log4j2)

1. 配置日志文件(示例 Logback)

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/var/log/app/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/var/log/app/app.%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>
</appender>

2. 查看日志

tail -f /var/log/app/app.log

四、集中收集(多台 CentOS 服务器)

方案 1:rsyslog

# /etc/rsyslog.conf
*.* @@logserver:514

方案 2:Filebeat + ELK

# filebeat.yml
filebeat.inputs:
- type: log
  paths:
    - /var/log/app/*.log

output.elasticsearch:
  hosts: ["es:9200"]

五、Docker 中的 Java 日志

1. 日志打到 stdout

docker logs -f container_id

2. 导出日志

docker logs container_id > app.log

六、日志轮转(防止磁盘爆)

logrotate 示例

vi /etc/logrotate.d/app
/var/log/app/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

七、排查 Java 崩溃日志

  • hs_err_pid*.log(JVM 崩溃)
  • OOM 日志:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/app/

如果你能告诉我:

  • Java 是 jar / war / 容器
  • 是否使用 systemd
  • 日志是 控制台还是文件

我可以给你更精确的配置示例

0