C#/。NET Standard的Syslog解析器库

时间:2020-06-25 10:45:15

标签: c# syslog

我需要读取各种日志文件并提取.NET中的相关信息(时间戳,主机名,消息等)。是否有受支持的.NET标准库同时支持解析BSD syslog(RFC3164)和IETF syslog(RFC5424)?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,不幸的是我找不到任何合适的东西,所以我最终编写了自己的代码。

对于 RFC5424,这对我有用:Regular Expression for SysLog RFC5424 对于 RFC3164,您可以像这样调整代码(快速和肮脏的版本):

private const string PrivalPattern = @"\<(?<PRIVAL>\d{1,3})\>";
private const string TimestampPattern = @"(?<TIMESTAMP>(?:(?:\w)+ (?:(?:0?[1-9]|[12][0-9]|3[01)])) (?:0?[0-9]|1[0-9]|2[0-3]):(?:0?[0-9]|[1-5][0-9]):(?:0?[0-9]|[1-5][0-9])))";
private const string HostnamePattern = @"(?<HOSTNAME>(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:\.|\S|\w)+)";
private const string MessagePattern = @"(?<MESSAGE>.+)?";

new Regex($@"^{PrivalPattern}{TimestampPattern} {HostnamePattern} {MessagePattern}",
                RegexOptions.None,
                new TimeSpan(0, 0, 5));