php syslog,关于syslog协议

在使用rsyslog的时候,一般来讲,如果消息中含有换行符的话,这条消息会以换行符为分隔,视为多条消息;即: rsyslog协议是基于行处理的,而且,默认单个消息大小为2k(rsyslogd v5),rsyslogd v8默认单个消息大小为8k。

问题: 一般来讲,程序出错时的堆栈信息都是多行的,这种情况该如何处理呢?

办法1: 先将堆栈信息中的换行替换成其它字符

办法2: 其实rsyslog是可以支持换行的,只是不是想换就换的,在structure data中可以小心地换行

关于syslog协议有两个rfc:

The BSD syslog Protocol rfc3164

The Syslog Protocol rfc5424

其中:

rfc3164 定义的syslog协议是比较原始的用法,不支持消息的换行

rfc5424 是所谓的version为1的syslog协议,支持 structure data;就是这个structure data中是可以包含换行的; 当然,要严格遵照定义的格式的哦

rsyslog (rsyslog-8.17.0)源码学习:

runtime/stream.c 中是这么解析的

21ec72ec395366401dc3b908ea97f038.png

翻译下:

mode=0 单行模式,遇到回车算做消息结束

mode=1 空行分隔模式,遇到空行算作消息结束(就是相邻消息之间要已空行分隔)

mode=2 非空开头模式, 只要下一行空白(应该也包含tab吧)开头就算作上个消息的一部分,不视为新消息

不幸的是,目前发现只有imfile模块才支持这三种模式之间的选择,更不幸的时,imfile模块使用inotify配置时,mode=2有bug(我测试时不是有bug,是根本不能用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值