Log4j 我可以使用更高级的模板在syslog ng中提取$PROGRAM吗?
我使用Java中的两个Apache syslogappender向Syslog发送消息。我的转换模式是:Log4j 我可以使用更高级的模板在syslog ng中提取$PROGRAM吗?,log4j,syslog,syslog-ng,Log4j,Syslog,Syslog Ng,我使用Java中的两个Apache syslogappender向Syslog发送消息。我的转换模式是: 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_jbos
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-MyApp
和Instance-${jboss.server.name}
的文件夹中
是否可以使用Syslog中的template()指令从消息中正确提取$PROGRAM
的值,分别获取MyApp和${jboss.server.name}
提前谢谢
丰富的
ps:需要澄清的是,
${jboss.server.name}
正在正确地扩展到所有地方。我找到了一个解决方案:更改消息的格式,以便希望作为$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
这样,模板就可以正确地返回我想要的内容