Comment puis-je accéder à la configuration de Log4J appenders au moment de l'exécution?
Je veux configurer un appender au démarrage, puis ajouter et supprimer dynamiquement à partir de différents enregistreurs sur demande. Je préfère avoir log4j configurer ce appender lui-même, et il suffit de saisir une référence à elle en cas de besoin. Si ce n'est pas possible, je vais devoir instancier l'appender moi-même et de s'accrocher à elle.
- Je veux faire exactement la même chose. Je veux configurer appenders dans log4j.propriétés, puis sélectionnez et ajoutez le à la rootLogger dynamiquement à l'exécution.
Vous devez vous connecter pour publier un commentaire.
Appenders sont généralement ajoutés à la racine de l'enregistreur. Voici un pseudo-code
Je suis sûr que vous pouvez le faire sur d'autres enregistreurs de la racine de l'enregistreur, bien que je n'ai jamais essayé.
La Enregistreur classe possède des méthodes pour getAllAppenders(), getAppender(), addAppender(), et removeAppender() méthodes héritées de l' Catégorie classe. Cependant, la Catégorie de la classe est obsolète, et en plus de cela, je n'ai jamais essayé de le faire avant, mais cela pourrait être un point de départ utile.
Category
a été superseeded parLogger
classe.Logger
juste hérite deCategory
. Donc, siCategory
's de la méthode elle-même n'est pas obsolète, il est tout à fait correct à utiliser.Je veux faire exactement la même chose. Je veux configurer appenders dans log4j.propriétés, puis sélectionnez et ajoutez le à la rootLogger dynamiquement à l'exécution.
Je ne pouvais pas comprendre comment accéder à la appenders autres que par l'intermédiaire d'un enregistreur à laquelle ils avaient été attachés, j'ai donc fini par la création d'un mannequin enregistreur de, et d'attacher les appenders afin que je puisse récupérer dynamiquement. Ce n'est pas l'idéal mais comme toutes les ressources utilisées par les appenders (par exemple, les fichiers) sont créés à l'avance, même si ils ne sont pas utilisés.
Je voudrais faire de cette façon :
Maintenant, si ce n'est votre propre appender, en train de faire (2) devrait être facile, car vous connaissez le sens de l'propriétés et savoir à quoi s'attendre. Sinon, vous voudrez probablement utiliser la réflexion pour instancier la classe et appeler ses accesseurs de propriété avant de le faire (3).
Si c'est l'activation /la désactivation des Appenders au moment de l'exécution de ce que vous voulez faire, puis j'ai trouvé une autre solution (bien que pas très élégant). À l'aide de configuration log4j ajoutez tous les Appenders vous auriez besoin comme vous le faites normalement.
Au moment de l'exécution quand vous voulez "désactiver" un appender ajouter un (org.apache.log4j.spi) Filtre à elle que revient le Filtre.REFUSER pour chaque message de journal. De cette façon, pas de messages de rendre grâce pour ce Appender. Quand vous voulez pour "activer" l'Appender dos, juste effacer le Filtre que vous avez ajouté ci-dessus.
J'ai testé et ça marche bien pour nous (log4j 1.2).