2
votes

fichier de propriétés log4j2 pour un ajouteur personnalisé

J'ai créé un appender personnalisé et il n'est pas appelé lorsque j'exécute mon test. Voici à quoi ressemblent les propriétés:

name=config
appenders=console, myCustomAppender

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
#appender.console.layout.pattern =%d{HH:mm:ss} [%t] %c{1} [%-5level] - %msg%n
appender.console.layout.pattern=%d{dd-MM-yyyy HH:mm:ss} [%-5p] (%F:%L) - %m%n

appender.myCustomAppender = com.myCompany.logging.log4j.WindowsEventLogAppender
appender.myCustomAppender.name = WindowsEventLogAppender
appender.myCustomAppender.type = WindowsEventLogAppender

rootLogger.level=info
rootLogger.appenderRefs=stdout, myCustomAppender
rootLogger.appenderRef.stdout.ref=STDOUT

Mon appender s'appelle un WindowsEventLogAppender. Une idée de ce qui ne va pas avec mon fichier de propriétés? Je vois les messages de test de la console mais aucun des messages de mon appender. Pour le moment, je fais juste un System.out.println dans mon appender personnalisé pour vérifier qu'il est appelé.

BTW, j'ai trouvé beaucoup d'exemples XML pour les configurations log4j2 avec des appenders personnalisés mais aucun d'avoir utilisé un fichier de propriétés pour la configuration.

Merci, -Mike


2 commentaires

Eh bien, pourquoi ne choisissez-vous pas de charger le xml? C'est la méthode par défaut et recommandée. Et simple aussi. Je ne veux pas paraître condescendant, juste une opinion


Je l'ai fait fonctionner avec le format XML, mais nous avons beaucoup de composants qui utilisent des fichiers de configuration .properties. Je pensais que garder les .properties serait la meilleure voie à suivre car je n'aurais pas à convertir un tas de fichiers .properties en XML. De plus, il semblerait que cela devrait fonctionner correctement? Sinon, pourquoi fournir la méthode .properties.


3 Réponses :


0
votes

Essayez d'ajouter la propriété packages.

Comme: packages = com.myCompany


0 commentaires

0
votes

Vous n'avez pas inclus les informations sur le package

essayez la configuration ci-dessous.

name=config
appenders=console, myCustomAppender
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
#appender.console.layout.pattern =%d{HH:mm:ss} [%t] %c{1} [%-5level] - %msg%n
appender.console.layout.pattern=%d{dd-MM-yyyy HH:mm:ss} [%-5p] (%F:%L) - %m%n
appender.myCustomAppender = com.myCompany.logging.log4j.WindowsEventLogAppender
appender.myCustomAppender.name = WindowsEventLogAppender
appender.myCustomAppender.type = WindowsEventLogAppender
rootLogger.level=info
rootLogger.appenderRefs=stdout, myCustomAppender
rootLogger.appenderRef.stdout.ref=STDOUT
rootLogger.com.mycompany.example=INFO,STDOUT


0 commentaires

0
votes

Je suis peut-être assez en retard ici, mais je pense que ma réponse peut aider d'autres personnes à chercher des réponses. Veuillez accepter ceci comme réponse si cela est correct!

Si vous avez créé un appender personnalisé avec une annotation comme celle-ci:

# this packages attribute is important, please put comma seperated package(s) to the 
# plugin(s) you have created
packages = com.package.to.your.plugin

# Example: Declare and Define OOTB Console appender, which sends log events to stdout
appender.console.name = stdout
appender.console.type = Console

# Declare and define the custom appender like this
# Note that the "abc" in "appender.abc.type" can be anything
# and the value for "appender.abc.type" should be the same as 
# "Name" attribute value given in custom appender plugin which is "MyCustomAppender"
appender.abc.name=arbitrary_name
appender.abc.type=MyCustomAppender

rootLogger.appenderRef.stdout.ref = stdout
rootLogger.appenderRef.abc.ref = arbitrary_name    

logger.loggeridentifier.name = com.test.SomeClass
logger.loggeridentifier.appenderRef.stdout.ref = stdout
logger.loggeridentifier.appenderRef.abc.ref = arbitrary_name

# Also note that the value of appenderRef should be the same name given to your 
# appender in properties file, which in this case is "arbitrary_name" (as given above)

Le manuel log4j2 sur Configuring Appenders indique que:

"Un appender est configuré soit en utilisant le nom du plugin appender spécifique, soit avec un élément appender et l'attribut type contenant le nom du plugin appender"

Ce qui signifie que le type pour appender doit être la valeur d'attribut Name d'Appender Plugin.

Dans le cas ci-dessus, MyCustomAppender ( appender.identifierName.type = MyCustomAppender )

Ainsi, la configuration du fichier de propriétés pour que cela fonctionne devrait être:

(Remarque: j'ai ajouté un appender stdout (console) juste pour afficher pertinence / similarité d'utilisation avec les appenders OOTB, et 2 exemple utilisation avec RootLogger et un enregistreur personnalisé)

@Plugin(name = "MyCustomAppender", category = "Core", 
elementType = "appender", printObject = true)
public final class MyCustomAppenderImpl extends AbstractAppender {
  // other code for the plugin....
}


0 commentaires