Syslog 每条消息最大长度分析
2015-09-24 21:37
253 查看
问题
syslog 就不多说了,最近碰到一个问题:在用LogInsight的时候,一条日志会被分成两条,第一条以…结尾,第二条以…开头,并且第二条没有被正确的建立索引。想了一下由于是用log4j发的syslog消息,所以消息被分割可能是log4j的问题,于是看了一下代码,找到这么两块:if(packet.length() > 256) { this.splitPacket(hdr, packet); } else { this.sqw.write(packet); }
和
private void splitPacket(String header, String packet) { int byteCount = packet.getBytes().length; if(byteCount <= 1019) { this.sqw.write(packet); } else { int split = header.length() + (packet.length() - header.length()) / 2; this.splitPacket(header, packet.substring(0, split) + "..."); this.splitPacket(header, header + "..." + packet.substring(split)); } }
看起来如果有包的内容大于1019的话,会切成两块,那么1019是怎么来的呢?
Syslog 协议
BSD syslog protocol
The BSD syslog Protocol 上面说到,一条消息分为三部分:PRI,header和msg(就是body)。PRI用来表示设备或者优先级,它可能有3,4,5个字节。header可以为空。而一条消息最大是1024个字节,那么对msg,1024-5=1019 这就是长度限制的来历。RFC5424 syslog protocol
RFC5424 则规定最大长度是2048个字节。log4j
log4j 1.2
这里的syslog appender 在代码里是参照BSD syslog 来写的,而我们的项目用的又是log4j1.2。。。太老了啊。。log4j 2
log4j 2还是比较人性化的。。同时支持BSD和RFC 5424,可选的项也多了好多,文档也好全。。。我猜测它还支持BSD就是为了让log4j1.2更容易的迁移到log4j2里。相关文章推荐
- poj 3320 Jessica's Reading Problem (尺取法)
- jquey 92 json.parse json.stringify
- IOS后端SQL的可见性
- java字符转换
- Java基础知识强化72:正则表达式之判断功能(手机号码判断 和 校验邮箱)
- JAVA学习第三天
- In-Situ可视化
- linux kernel learning notes
- 动态规划之矩阵链相乘
- 端口扫描基础
- 特征选择常用算法综述
- 动态规划之矩阵链相乘
- 【线段树】[CQBZOJ1906]Hotel
- ubuntu14.04下安装爬虫工具scrapy
- 提取 字符串中 数字
- eclipse 缓解眼睛疲劳保护眼睛
- android PorterDuffXfermode、PorterDuff.Mode 使用
- 2015年最值得学习的编程语言是?
- 附加题1——我想搞懂的软工问题
- Linux静态库和共享库