0

我正在使用 Java 中的两个 Apache SyslogAppenders 向 Syslog 发送消息。我的转换模式是:

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

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

在我的 syslog 配置文件中,我有:

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-MyAppand的文件夹Instance-${jboss.server.name}

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

提前致谢

富有的

ps:要明确${jboss.server.name}的是,到处都在适当扩展。

4

1 回答 1

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

这样,模板正确返回我想要的。

于 2010-08-12T08:58:11.933 回答