java 利用syslog4j 实现 syslog客户端发送日志,解决日志过长被截断分批发送以及日志不完整的问题

开发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

此时日志输出完整

 注意:此处设置的大小是根据项目需要来设定的,大家可以根据自己的项目需求进行调整

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值