syslogd:日志文件格式(不是configuration格式)

我想parsing日志文件。 syslogd的日志文件格式是否与所有系统相同? 在我的系统(Debian Lenny)上,它是:

Mar 7 04:22:40 my-host-name ... 

(我对…部分不太感兴趣)

我可以依靠这个吗? 还有可能是一些或多或less的官方描述? syslogd的手册页描述了configuration格式,而不是日志文件格式。

理想情况下,描述将给出字段的正式名称,如(date,时间,主机,条目)或(date时间,主机名,消息)。 也许还有一些正则expression式。 我想在我的脚本中使用名称和正则expression式,以避免不必要的偏离标准,并确保脚本无处不在。

谢谢

克里斯

RFC应该回答这个问题。 据我所知:是的,情况通常如此。

华纳指出,RFC 3164描述了UDP系统日志消息的networking格式,你可以依靠这个来传递信息,但是syslogd在logging你的消息时可能会写入与磁盘稍有不同的东西。
也就是说,通常您可以依赖类似于RFC中所描述的syslog条目,大致的forms如下:

 DATE HOSTNAME TAG: MESSAGE 

date的forms是Jan 1 00:00:01
主机名通常是简短的主机名,但可能是完全限定的(特别是如果您从远程主机logging消息)
标签是自由的,但按照惯例不包含: 。 它通常是procname[PID]的forms,我相信它总是跟着一个字面:
消息是自由的

如果您需要更好地保证日志格式的一致性,那么syslog-NG值得查看 – 它将允许您定义字段并插入标记,以确保您可以parsing生成的文件。 syslog-NG还可以让你包含来自消息的设施+优先值等元数据。 不过,使用syslog-NG将“everywhere”的定义降低为“运行syslog-NG的机器,其configuration类似于你的configuration”。

魔鬼在@warner链接的RFC中:

4.1.3系统日志包的MSG部分

MSG部分将填充syslog数据包的其余部分。 这通常包含生成该消息的过程的一些附加信息,然后包含该消息的文本。 这部分没有结尾分隔符。 系统日志数据包的MSG部分必须包含可见(打印)字符。 传统上和最经常使用的代码集在八位字段中也是七位ASCII,如在PRI和HEADER部分中使用的那样。 在此代码集中,唯一允许的字符是ABNF VCHAR值(%d33-126)和空格(SP值%d32)。 但是,不需要在MSG中使用的代码集的指示,也不是期望的。 其他代码集可以使用,只要在MSG中使用的字符是唯一可见的字符和空间类似于上述。 在MSG部分中使用的代码集的select应该与想要的接收方的想法一致。 包含代码集中的字符的消息不能被收件人查看或理解,将不会产生对于查看它的操作员或pipe理员有价值的信息。 MSG部分具有两个称为TAG字段和CONTENT字段的字段。 TAG字段中的值将是生成消息的程序或进程的名称。 CONTENT包含消息的细节。 传统上这是一个自由forms的消息,提供了一些事件的详细信息。 TAG是ABNF字母数字string,不得超过32个字符。 任何非字母数字字符将终止TAG字段,并将被认为是CONTENT字段的起始字符。 通常,CONTENT字段的第一个字符表示该字段

这基本上说,开发人员可以把他们想要的任何东西放入CONTENT中,所以对于消息的实际内容,实际上没有标准。 我可能会说这是一个缺陷,但我还不确定。