如何用 Log4j 把日志写入 syslog?

Log4j2 通过 SyslogAppender 把日志发到本地或远程 syslog:在 log4j2.xml 中配置 Syslog appender 指定 host、port、protocol 与格式。本文给出完整配置与注意事项。

最佳实践
如何用 Log4j 把日志写入 syslog?封面

核心做法:Log4j2 内置 Syslog Appender,在 log4j2.xml 中声明一个指向 syslog 服务(本地 /dev/log 或远程 host:port)的 appender,挂到 Logger 上即可;协议选 TCP 更可靠,格式建议 RFC5424。

1. 添加依赖

Maven:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.23.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.23.1</version>
</dependency>

2. 配置 Syslog Appender

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Syslog name="Syslog" host="127.0.0.1" port="514"
            protocol="TCP" facility="LOCAL0"
            format="RFC5424" appName="order-service"
            newLine="true" charset="UTF-8"/>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss} %-5p %c - %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="Syslog"/>
    </Root>
  </Loggers>
</Configuration>

关键属性:

  • host / port:syslog 服务地址,远程集中时填 syslog 服务器 IP
  • protocolTCP(可靠)或 UDP(快但可能丢)
  • facilityLOCAL0~LOCAL7 通常留给应用自定义
  • appName:出现在 syslog 消息里,标识应用来源

3. 注意事项

  1. 远程 syslog 服务要先开端口:rsyslog 默认不监听 514,需取消 $ModLoad imtcp / $InputTCPServerRun 514 注释。
  2. 生产用 TCP:UDP 丢包无感知,审计类日志必须 TCP 或 RELP。
  3. 异步提升吞吐:高并发下用 AsyncLogger(Log4j2 的招牌能力)包一层,避免日志 I/O 拖慢业务线程。
  4. 测试连通logger -p local0.info -n 127.0.0.1 -P 514 -T "test" 先验证通道。

观测云对照

syslog 通道直接对接观测云。 DataKit 支持接收 syslog 消息(TCP/UDP),Log4j2 的 Syslog Appender 指向 DataKit 监听地址即可,日志经 Pipeline 解析后进入日志查看器,无需经过本地 rsyslog 中转。

常见问题(FAQ)

Q:Log4j 1.x 也支持 syslog 吗?
A:有 SyslogAppender,但 Log4j 1.x 早已停止维护且存在安全漏洞,应尽快升级到 Log4j2。

Q:发到 syslog 的日志中文乱码?
A:确认 appender 的 charset="UTF-8",且接收端(rsyslog/DataKit)按 UTF-8 处理。

Q:能同时写文件和 syslog 吗?
A:可以,Logger 挂多个 AppenderRef 即可,互不影响。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台