我想解析日志文件。syslogd 的日志文件格式是否对所有系统都相同?在我的系统(Debian Lenny)上,它是:
Mar 7 04:22:40 my-host-name ...
(我对 ... 部分不太感兴趣)
我可以依靠这个吗?是否有一些或多或少的官方描述?的手册页syslogd
描述了配置格式,但没有描述日志文件格式。
理想情况下,描述会给字段提供官方名称,例如(日期、时间、主机、条目)或(日期时间、主机名、消息)。也许另外一些正则表达式。我想在我的脚本中使用名称和正则表达式,以避免不必要地偏离标准,并确保脚本到处运行。
谢谢
克里斯
Warner 向您指出的 RFC 3164 描述了 UDP syslog 消息的网络格式,您可以依靠这是通过网络传输的内容,但是 syslogd 在记录您的消息时可能会写入与磁盘略有不同的内容。
也就是说,您通常可以依赖类似于 RFC 中描述的系统日志条目,大致形式如下:
日期的格式
Jan 1 00:00:01
主机名通常是短主机名,但可能是完全限定的(特别是如果您正在记录来自远程主机的消息)
标签是自由格式,但按照惯例不包含
:
. 它通常是形式的procname[PID]
,我相信后面总是跟一个字面的:
Message是自由形式的
如果您需要更好地保证日志格式的一致性,syslog-NG 值得研究——它可以让您定义字段并插入标记,以确保您可以解析结果文件。syslog-NG 还允许您包含元数据,例如消息中的设施+优先级值。不过,使用 syslog-NG 可以将“无处不在”的定义简化为“运行 syslog-NG 且配置与您的配置相似的机器”。
RFC应该回答这个问题。据我所知:是的,通常是这样。
魔鬼在@warner 链接的 RFC 中:
4.1.3 MSG 系统日志包的一部分
这实质上是说开发人员可以将他们想要的任何内容粘贴到 CONTENT 中,因此对于消息的实际内容确实没有标准,仅针对消息的组织。我可能会说这是一个缺陷,但我还不确定。