我假设您的意思是 /home/logFile.log 中每一行的格式如下:
tag: message
其中 tag 是编码系统日志设施和严重性值的十进制数。如果您可以控制写入 logFile.log 的应用程序,您唯一需要做的就是稍微更改格式:
<tag>message
使用这种格式,syslog-ng 会自动解析和提取设施/严重性信息。
如果您无法更改应用程序并且“标签:消息”是固定格式,那么这会涉及更多。如果 tag 只是一个包含设施值的字符串,那么它非常简单,假设你有一个最近的 syslog-ng 版本:
rewrite tag_to_facility {
set-facility("$(list-head $(explode : $MSG))")
};
同样,您可以使用 set-severity() 重写操作。
如果标记值是数字并且恰好与 syslog 协议对设施/严重性信息的编码方式相匹配,则可以执行以下操作:
rewrite tag_to_facility_severity {
# $(% ) means modulo division, e.g. mask off the last 3 bits of its argument
# $(list-head takes off the first element of a list
# $(explode) splits an argument by a separator and returns a list
set-severity("$(% $(list-head $(explode : $MSG)) 8)")
set-facility("$(/ $(- $(list-head $(explode : $MSG)) $SEVERITY_NUM) 8)")
};
如您所见,syslog-ng 具有非常强大的表达式语言,能够进行算术运算。它可能会有所改进,以便更容易屏蔽整数的位,但我已经注意到这是一个功能请求。:)