温馨提示×

Java在CentOS上的日志配置指南

小樊
38
2025-12-31 02:52:28
栏目: 编程语言

Java在CentOS上的日志配置指南

一 前置准备与目录权限

  • 确认 JDK 已安装:java -version。如无则安装,例如:sudo yum install java-11-openjdk-devel
  • 规划日志目录,建议统一放在 /var/log/应用名/,并设定属主与权限,便于服务账户写入与集中采集:
    • 创建目录:sudo mkdir -p /var/log/myapp
    • 设定属主(以 javauser:javauser 为例):sudo chown -R javauser:javauser /var/log/myapp
    • 设定权限:sudo chmod -R 755 /var/log/myapp
  • 配置文件通常位于应用 classpath(如 src/main/resources),修改后需重启应用生效(如 systemctl restart tomcat 或重启自启动脚本)。

二 选择日志框架与放置配置文件

  • 常见方案与配置文件位置如下(按项目实际依赖为准):
框架 配置文件 放置位置 说明
Log4j 1.x log4j.properties / log4j.xml classpath 经典、配置直观
Logback logback.xml / logback-test.xml classpath SLF4J 配合常用
SLF4J 无独立配置 日志门面,需绑定 LogbackLog4j 等实现
java.util.logging logging.properties 任意路径,启动参数指定 JDK 内置,需通过系统属性加载
  • 若使用 SLF4J,需确保引入对应实现(如 logback-classiclog4j-slf4j-impl),避免“仅门面无实现”导致无日志输出。

三 常用配置示例

  • Log4j 1.x 文件输出与按大小滚动(RollingFileAppender)
    log4j.rootLogger=INFO, file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=/var/log/myapp/myapp.log
    log4j.appender.file.MaxFileSize=10MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
  • Logback 基于时间的滚动(TimeBasedRollingPolicy)
    <configuration>
      <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/var/log/myapp/myapp.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>/var/log/myapp-%d{yyyy-MM-dd}.log</fileNamePattern>
          <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
          <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
      </appender>
      <root level="info">
        <appender-ref ref="FILE"/>
      </root>
    </configuration>
    
  • java.util.logging 使用 logging.properties
    handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler
    .level=INFO
    java.util.logging.ConsoleHandler.level=INFO
    java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
    java.util.logging.FileHandler.level=INFO
    java.util.logging.FileHandler.pattern=/var/log/myapp.log
    java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
    java.util.logging.FileHandler.limit=1000000
    java.util.logging.FileHandler.count=10
    
    启动时指定配置:java -Djava.util.logging.config.file=/path/to/logging.properties -jar myapp.jar

四 日志轮转与系统日志集成

  • 框架内置轮转(推荐优先):
    • Log4j 1.x 使用 RollingFileAppenderMaxFileSize / MaxBackupIndex
    • Logback 使用 TimeBasedRollingPolicy / SizeAndTimeBasedRollingPolicy 等策略,便于按天/按大小切分与保留历史。
  • 系统级轮转(logrotate,适合容器外或无法改应用配置的场景):
    • 新建配置:sudo vim /etc/logrotate.d/myapp
      /var/log/myapp/*.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 0644 javauser javauser
      }
      
    • 测试:logrotate -d /etc/logrotate.d/myapp
    • 生效:sudo systemctl reload logrotate(或等待定时任务执行)。
  • 输出到系统日志(syslog):
    • 在应用侧使用 SLF4J + Logback/Log4j,并通过 log4j-slf4j-impljul-to-slf4j 等桥接,将 JUL 与第三方日志统一到 SLF4J,再由 SyslogAppender 或系统日志框架输出到 syslog(具体需按所用框架版本配置 Appender/Handler)。

五 运行与维护要点

  • 修改配置后需重启应用(如 systemctl restart tomcat 或重启自启动脚本)使新配置生效。
  • 动态调节日志级别:
    • Log4j:将 log4j.rootLogger=INFO, … 改为 DEBUG 并重启;
    • Logback:将 <root level="info"> 改为 debug 并重启;
    • JUL:将 java.util.logging.ConsoleHandler.level=INFO 改为 FINE 并重启。
  • 排查要点:
    • 确认配置文件在 classpath 且被加载;
    • 检查 /var/log/ 目录与文件的属主/权限(如 javauser:javauser 755);
    • 容器/系统服务场景,确认服务账户、工作目录与挂载卷的写权限一致。

0