我可以使用更高级的模板在syslog-ng中提取$ PROGRAM吗?

时间:2010-08-10 13:22:07

标签: log4j syslog syslog-ng

我使用Java中的两个Apache SyslogAppender向Syslog发送消息。我的ConversionPatterns是:

Instance-${jboss.server.name}: %d %-5p [%c] (%t) %m%n
Application-MyApp: ${jboss.server.name} - %d %-5p [%c] (%t) %m%n

然后,我将不同的Log4J类别配置为向其中一个或两个appender发送不同的消息。

在我的系统日志配置文件中,我有:

destination d_jboss_appli_integ {
    file("/var/log/syslog-ng/JBoss/intg/Applications/$PROGRAM/$YEAR$MONTH$DAY.log"
    template("Application-$PROGRAM: $MSG\n"));
};
destination d_jboss_instance_integ {
    file("/var/log/syslog-ng/JBoss/intg/Instances/$PROGRAM/$YEAR$MONTH$DAY.log"
    template("Instance-$PROGRAM: $MSG\n"));
};

像这样,我想要拥有的是登录/var/log/syslog-ng/JBoss/intg/Applications/MyApp/中的文件和/var/log/syslog-ng/JBoss/intg/Instances/${jboss.server.name}/中的文件,其中${jboss.server.name}被名称替换JBoss服务器。

相反,我将日志写入名为Application-MyAppInstance-${jboss.server.name}的文件夹。

是否可以在Syslog中使用template()指令从消息中正确提取$PROGRAM的值,分别获取MyApp和${jboss.server.name}

提前致谢

ps:要明确${jboss.server.name}正在适当地扩展到各处。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:更改消息的格式,以便您想要的值$PROGRAM是第一个冒号之前的唯一值:

所以,以下内容:

Instance-${jboss.server.name}: %d %-5p [%c] (%t) %m%n
Application-MyApp: ${jboss.server.name} - %d %-5p [%c] (%t) %m%n

变为:

${jboss.server.name}:Instance: %d %-5p [%c] (%t) %m%n
MyApp:Application:${jboss.server.name}: - %d %-5p [%c] (%t) %m%n

这样,模板就能正确返回我想要的内容。