2010-10-30 54 views
0

J'écris actuellement un service web en utilisant Restlet, et je me connecte avec slf4j devant log4j. Actuellement, j'ai des annexes log4j standard en place pour la connexion aux fichiers. Ce que j'essayais de faire est également d'inclure une sortie de journal dans la réponse HTTP, en utilisant un Appender personnalisé. Le problème que je vois est que les appendices par défaut n'ont pas la capacité d'accéder au contexte de la demande faite, ce qui est logique car théoriquement la requête pourrait se terminer avant qu'un Appender asynchrone ne passe à l'exécution. Je suis toujours curieux de savoir si cela est possible, peut-être en rendant l'Appender synchrone et en passant un objet Response avec l'appel de journal. Je ne peux pas trouver un moyen que log4j supporterait cela, un autre framework comme logback? Je n'utiliserais pas nécessairement cette méthode à la fin en raison des implications de performance, mais je suis toujours curieux. FYI ma solution de contournement actuelle est une méthode de journal personnalisé qui ajoute l'entrée à la réponse, puis appelle la méthode slf4j pour la journalisation standard. L'inconvénient est d'avoir à utiliser une méthode personnalisée, et je ne reçois que des entrées de journal pour le contrôle du code I (les bibliothèques que j'utilise n'utilisent que les appendices ne sont pas consignées dans la réponse)Un Appender log4j (ou un autre enregistreur Java) peut-il accepter ou accéder aux objets de contexte de requête?

Répondre

0

La plupart des opérations Appender ne se produisent pas asynchrone. Je ne sais pas comment slf4j modifie cette équation, mais vous pouvez certainement créer un Appender qui sait comment formater un objet donné dans un LogEvent. L'asynchronicité ne devrait pas vraiment avoir d'importance, puisque le contexte de la demande devrait être immuable une fois qu'il arrive dans l'Appender - conserver une référence devrait suffire.

Comment accéder au contexte de la demande en dehors du code Log4J?

Je ne ferais probablement que résoudre ceci en utilisant un appender personnalisé qui savait comment traiter spécifiquement un Context à des fins de consignation.