Могу ли я использовать более сложный шаблон для извлечения $ PROGRAM в syslog-ng? - PullRequest
0 голосов
/ 10 августа 2010

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

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

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

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

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

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

1 Ответ

0 голосов
/ 12 августа 2010

Я нашел решение: измените формат сообщений так, чтобы значение, которое вы хотите использовать в качестве значения $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

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

...