2010-08-10 9 views
0

Я отправляю сообщения в Syslog, используя два Apache SyslogAppenders в Java. Мои ConversionPatterns являются:

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

Я тогда различные категории Log4J настроены для отправки различных сообщений, либо один из, или обоих appenders.

В моем файле конфигурации системного журнала, у меня есть:

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}.

Возможно ли использовать директиву template() в Syslog для правильного извлечения из сообщений сообщений $PROGRAM, получения MyApp и ${jboss.server.name} соответственно?

Заранее спасибо

Rich

пс: просто быть ясно ${jboss.server.name} будет должным образом расширяется во всем мире.

ответ

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 

Таким образом, шаблон правильно возвращает то, что я хочу.