开发syslog客户端:
方法一,引用org.graylog2:
<dependency>
<groupId>org.graylog2</groupId>
<artifactId>syslog4j</artifactId>
<version>0.9.60</version>
</dependency>
方法二 引用org.syslog4j:
<dependency>
<groupId>org.syslog4j</groupId>
<artifactId>syslog4j</artifactId>
<version>0.9.30</version>
</dependency>
本项目采用的是方法一,引用org.graylog2
代码:
@KafkaListener(topics = “topic”}, groupId = “group”)
public void consumerSignalMessage(String content) {
log.info("syslog消费服务:" + content);
try{
List<SysLogConfig> list = getSysLogConfigs();
for (SysLogConfig sysConfig:list) {
syslogClient.getConfig().setHost(sysConfig.getHostIp());
syslogClient.getConfig().setPort(Integer.parseInt(sysConfig.getHostPort()));
syslogClient.getConfig().setMaxMessageLength(10240);
syslogClient.log(7, content);
}
}catch (Exception e){
log.error("出异常了!");
}
}
解决日志过长被截断分批发送问题:
一开始被截断分批发送,是因为setMaxMessageLength设置的值过小,设为了1024*2,因此当日志长度过长时,就被截断,前后加上了省略号,如下:
于是将setMaxMessageLength改成了1024*10,这次日志没有再被截断分批,但是显示出来的日志还是不完整的如下:
此时在网上查了很多资料,方法很多,如:
1.将日志转为utf-8格式后再发送
syslogClient.log(7, URLDecoder.decode( content, "utf-8"));
2.如果采用的是org.syslog4j,将版本升级至0.9.46
参考:https://blog.csdn.net/daodan988/article/details/78628685
3.中文字符长度问题,计算中文字符并调整长度后再发送等等
参考:syslog4j发送日志有中文会产生截断_se7en_q的博客-CSDN博客
以上方法一一尝试,都没有解决问题,后来突然想起来只修改了客户端的发送长度限制,并没有设置服务端的接收长度限制,问题终于得到解决,解决方法如下:
打开rsyslog配置文件:
vi /etc/rsyslog.conf
找到 #### MODULES #### 下的 $MaxMessageSize 10kb 配置设置单条日志长度,如没有新增该配置
重启rsyslog
systemctl restart rsyslog
此时日志输出完整
注意:此处设置的大小是根据项目需要来设定的,大家可以根据自己的项目需求进行调整