温馨提示×

centos日志记录级别设置指南

小樊
33
2025-12-05 18:13:18
栏目: 智能运维

一 核心概念与级别对照

  • 日志由“设施 Facility”和“级别 Severity”共同决定。设施代表日志来源类别,常见有:authpriv、cron、daemon、kern、mail、syslog、user、local0–local7;级别从低到高共 8 级debug(7)、info(6)、notice(5)、warning(4)、err(3)、crit(2)、alert(1)、emerg(0)。设置“级别”时,含义是“记录该级别及其以上更严重级别”的日志。例如:mail.=warn 仅记录 mail 的 warningmail.err 记录 err 及以上mail.*;mail.!info 记录 mail 的全部级别但排除 info

二 系统日志 rsyslog 与 journald 的设置

  • 配置文件与模块
    • 主配置:/etc/rsyslog.conf,包含模块加载、全局指令与规则;常见模块有 imuxsock、imjournal、imklog,以及可选的 imudp/imtcp 用于接收远程日志(UDP/TCP 514 端口)。CentOS 7 起默认通过 imjournalsystemd journal 读取本地日志。修改后执行:systemctl restart rsyslog 生效。
  • 常用选择器与动作
    • 选择器语法:<设施>.<级别或操作符>;动作可以是本地文件、用户、远程主机等。示例:
      • 记录除 mail、authpriv、cron 外所有 info 及以上/var/log/messages*.info;mail.none;authpriv.none;cron.none /var/log/messages
      • 仅记录 mail 的 warningmail.=warn /var/log/mail_warn.log
      • 记录 mail 全部但排除 infomail.*;mail.!info /var/log/mail_all_but_info.log
      • 忽略 local3 全部日志:local3.* ~
      • 转发到远程(UDP/TCP):*.* @192.0.2.10*.* @@192.0.2.10:10514
      • 文件前的短横线“-”表示异步写入(减少 I/O,断电可能丢未落盘数据):mail.* -/var/log/maillog
  • 远程接收与队列
    • 启用接收:取消注释 imudp/imtcpUDPServerRun 514 / InputTCPServerRun 514;远程侧按上述转发语法发送。
    • 可靠转发建议开启磁盘队列(示例):
      $ActionQueueFileName fwdRule1
      $ActionQueueMaxDiskSpace 1g
      $ActionQueueSaveOnShutdown on
      $ActionQueueType LinkedList
      $ActionResumeRetryCount -1
      *.* @@192.0.2.10:514
      
  • 与 systemd journal 的关系
    • 现代 CentOS 使用 journald 采集内核与系统日志,rsyslog 通过 imjournal 消费;如需查看与分析,可用 journalctl(如 journalctl -u rsyslog -f 实时跟踪)。rsyslog 仍负责按规则写入文件、转发与落盘策略。

三 Java 应用日志级别设置

  • 配置优先级建议:配置文件 > 启动参数/环境变量 > 代码动态设置。
  • 常见框架与示例
    • Spring Boot(application.properties/yml)
      • properties:logging.level.root=INFOlogging.level.com.example=DEBUG
      • yml:
        logging:
          level:
            root: INFO
            com.example: DEBUG
        
    • Logback(logback.xml)
      <configuration>
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
          <file>/var/log/myapp.log</file>
          <encoder>
            <pattern>%d{ISO8601} %-5level [%thread] %logger{36} - %msg%n</pattern>
          </encoder>
        </appender>
        <root level="INFO">
          <appender-ref ref="FILE"/>
        </root>
      </configuration>
      
    • Log4j2(log4j2.xml)
      <Configuration status="WARN">
        <Appenders>
          <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n%ex"/>
          </Console>
        </Appenders>
        <Loggers>
          <Root level="INFO">
            <AppenderRef ref="Console"/>
          </Root>
        </Loggers>
      </Configuration>
      
  • 运行时动态调整
    • 多数框架支持 JMX、HTTP 管理接口或 API 动态修改日志级别;也可在代码中按框架 API 调整(如设定 Logger 的 Level)。生产建议以配置文件为主,动态调整为辅。

四 日志轮转与保留策略

  • 使用 logrotate 管理日志文件大小与保留份数,避免单文件过大。示例(/etc/logrotate.d/myapp):
    /var/log/myapp.log {
      weekly
      rotate 4
      create 0644 root utmp
      missingok
      notifempty
      compress
      delaycompress
      sharedscripts
      postrotate
        /usr/bin/systemctl kill -s HUP rsyslog >/dev/null 2>&1 || true
      endscript
    }
    
    • 说明:weekly 每周轮转;rotate 4 保留 4 份;compress 压缩旧日志;postrotate 发送 HUP 让 rsyslog 重新打开日志文件。对高频日志(如 mail)使用“-”异步写入可减少 I/O,但需权衡断电数据丢失风险。

五 快速排错与最佳实践

  • 验证规则是否生效
    • logger 发送测试日志并观察目标文件或远程服务器是否收到:logger -p local3.info "test rsyslog rule";远程可用 tcpdump udp port 514ss -lunpt | grep 514 检查端口连通性。
  • 避免常见误区
    • mail.*mail.none 同时用于同一目标会造成冲突;使用 mail.*;mail.!info 排除某级别更清晰。
    • 远程转发建议启用磁盘队列与重试,提升可靠性;必要时使用 TCP 保证顺序与可靠性。
    • 谨慎使用文件前的“-”异步写入,确保业务可容忍潜在的少量数据丢失。

0