Windows下SpringBoot+Logback配置Syslog无响应,求排查
在Windows环境下运行SpringBoot项目,配置Logback的SyslogAppender向本地514端口的TCP Syslog服务器发送日志,控制台Appender正常输出,但Syslog服务器始终收不到日志。相关代码与配置如下:
Syslog服务器代码(Node.js)
const Syslog = require('simple-syslog-server') ; // Create our syslog server with the given transport const options = {} ; const address = 'localhost' ; // Any const port = 514 ; const listen = {host: address, port: port} ; var server = Syslog.TCP(options) ; server.on('msg', data => { console.log('message received from %s:%i\n%o\n', data.address, data.port, data) ; }) .listen(listen) .then(() => { console.log(`Now listening on: ${address}:${port}`) ; }) ;
Logback配置文件(logback.xml)
<configuration> <!-- Console Appender --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- Syslog Appender --> <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> <syslogHost>localhost</syslogHost> <!-- Syslog server hostname or IP address --> <port>514</port> <!-- Syslog server port --> <facility>LOCAL0</facility> <!-- Syslog facility --> <suffixPattern>[%thread] %logger %msg</suffixPattern> </appender> <!-- Set the default logging level --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="SYSLOG" /> </root> </configuration>
测试代码
logger.info("test test"); logger.info("test test"); logger.info("test test"); logger.info("test test"); logger.info("test test");
故障原因及解决方法
Windows端口权限限制:514属于1-1024的Well-Known端口,Windows下普通用户启动的进程无法绑定这类端口。如果你的Node.js服务器不是以管理员身份运行,实际并未成功监听514端口。解决方法:换用大于1024的端口(比如5140),同时修改Logback配置里的
<port>为对应端口,再以管理员身份启动服务器。Logback默认使用UDP协议发送:
SyslogAppender默认采用UDP协议传输日志,但你的服务器是监听TCP的。解决方法:把Logback配置中的SyslogAppender替换为SyslogTcpAppender,修改类名:<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogTcpAppender">或者在原
SyslogAppender中添加<protocol>TCP</protocol>配置项。TCP连接建立失败无提示:TCP是面向连接的协议,如果SpringBoot应用无法和Syslog服务器建立连接,日志会直接丢失。解决方法:开启Logback调试模式,在
<configuration>标签添加debug="true",查看控制台输出中是否有连接失败的报错信息,排查网络连通性问题。日志格式不兼容:simple-syslog-server对Syslog格式有严格要求,Logback默认生成的格式可能不符合服务器解析规则。解决方法:在SyslogAppender配置中添加
<format>RFC5424</format>,指定使用标准RFC5424格式,确保服务器能正确解析日志内容。
内容的提问来源于stack exchange,提问作者Kimin Lee

