2009-05-21 7 views
1

Dans le fichier log4j.properties, j'ai défini le niveau sur ERREUR. Pour certains utilisateurs, je dois définir Level sur DEBUG. J'ai été en mesure de modifier le niveau de journalisation au moment de l'exécution, mais cela sera activé pour tous les utilisateurs accédant à l'application en même temps. Y at-il une autre méthode par laquelle nous pouvons activer la journalisation pour les utilisateurs sélectionnés? Toute aide est la bienvenue.Activer la journalisation de Log4j pour certains utilisateurs

Répondre

0

Oui, mais. Vous pouvez faire en sorte que vos enregistreurs soient nommés avec la classe + l'utilisateur impliqué, plutôt que seulement la classe, et créer le logger sur la méthode (ou si vous voulez avoir envie, cachez les loggers dans une sorte de pool par utilisateur) , puis configurez la journalisation de manière appropriée.

Il est très compliqué et intrusif pour le code, mais comme l'utilisateur est une propriété d'exécution, je ne vois pas comment (à court d'AspectJ ou ses cousins) comment éviter ce genre de désordre.

Une autre option consiste à formater vos messages de journal et à inclure le nom d'utilisateur dans le message de journal, puis à analyser les journaux ultérieurement. Cela permettrait le débogage pour tout le monde (ce qui peut être un problème de performances, évidemment) mais si le souci est plus d'isoler une journalisation des utilisateurs plutôt que de limiter le nombre d'appels de débogage, cela peut être une solution.

4

Je présume que vous avez une application web ou similaire, et que plusieurs utilisateurs identifiables y accèdent simultanément?

Vous ne pouvez pas facilement modifier la configuration par utilisateur dans Log4j. Cependant, je considérerais ce qui suit (cela suppose un serveur Web ou similaire, chaque demande d'utilisateur étant sur un fil séparé):

  1. d'identifier l'utilisateur effectuant un appel de serveur dès qu'ils font cet appel. Stockez ces données utilisateur dans un MDC
  2. Implémentez un Log4J personnalisé appender. Pour chaque appel entrant, vous pouvez inspecter l'utilisateur stocké dans le MDC et ajuster la gravité/journalisation selon les besoins.

C'est un peu de travail (compte tenu des hypothèses ci-dessus), mais devrait fonctionner. Évidemment, ce n'est pas valable si les hypothèses que j'ai faites à propos de votre architecture sont incorrectes.

+1

Ne créez pas d'appender personnalisé. Vous auriez un nouveau type pour chaque type d'appender. Au lieu de cela, créez un filtre unique qui peut être composé avec n'importe quel appender. – erickson

+0

J'avais vaguement envisagé un ajout d'appender personnalisé à d'autres ensembles d'appenders. Mais les filtres ressemblent à une solution très appropriée dans ce cas. –

1

Ce problème est résolu dans logback (successeur de log4j) avec TurboFilters. Voir l'exemple intitulé "Configuration de MDCFilter et MarkerFilter". Si vous avez besoin d'aide, contactez la liste de diffusion de l'utilisateur de logback.

Questions connexes