2010-08-10 22 views
0

J'envoie des messages à Syslog en utilisant deux Apache SyslogAppenders en Java. Mes ConversionPatterns sont:

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

J'ai alors différentes catégories Log4J configuré pour envoyer des messages différents à l'un, ou les deux appenders.

Dans mon fichier de configuration de syslog, j'ai:

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")); 
}; 

Comme ça, ce que je veux avoir est la connexion à un fichier dans /var/log/syslog-ng/JBoss/intg/Applications/MyApp/ et à un fichier dans /var/log/syslog-ng/JBoss/intg/Instances/${jboss.server.name}/${jboss.server.name} est remplacé par le nom du serveur JBoss. Au lieu de cela, j'obtiens des journaux écrits dans des dossiers appelés Application-MyApp et Instance-${jboss.server.name}.

Est-il possible d'utiliser la directive template() dans Syslog pour extraire correctement la valeur de $PROGRAM des messages, obtenir MyApp et ${jboss.server.name} respectivement?

Merci à l'avance

Rich

ps: juste pour être clair ${jboss.server.name} est correctement étendu partout.

Répondre

0

J'ai trouvé une solution: changer le format des messages de sorte que la valeur que vous voulez que la valeur de $PROGRAM est la seule valeur avant le premier colon:

, les mentions suivantes:

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

Devient:

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

De cette façon, le modèle retourne correctement ce que je veux.