8
votes

Meilleure façon de modifier log4j ajouté pour la journalisation

Je me développe actuellement bientôt pour être un service Web de repos (bon fonctionnement) et je souhaite capturer des journaux vraiment bonnes, afin que je puisse avoir une bonne idée de ce qui se passe où se passe. Pour l'instant, j'utilise log4j pour la journalisation, à l'aide de ce paramètre ajouté: xxx pré>

qui produit ce type de journal: p>

10:44:55,893 INFO  [STDOUT]


2 commentaires

Non JBoss MAIS% D {Absolute} vous a donné 10: 44: 55 893 Message


Pourriez-vous clarifier - Qu'est-ce qui est laid de définir un modèle de conversion personnalisé?


5 Réponses :


7
votes

question 1:

Utilisez la mise en page de modèle suivante pour votre appendend: xxx

Le modèle de conversion dans le fichier de configuration que vous avez indiqué. n'entraîne pas le genre de journal que vous avez indiqué. Par exemple, la date / heure n'est pas incluse dans votre motif de conversion.


question 2:

Vous pouvez utiliser un enregistreur spécial qui utilise un autre appendendais qui ne connecte que le message pur.

Votre configuration ressemble par exemple aux éléments suivants: xxx

Vous utilisez le SPOSELLOGGER pour les messages purs sans les informations supplémentaires. Il peut être utilisé dans plusieurs classes.

dans la configuration du spéciallogger, additive = "false" est nécessaire, car sinon également l'appendeur consoleAppender2 de l'enregistreur racine enregistre le même message. (Le message serait connecté deux fois dans ce cas.)

Votre code pourrait par exemple ressembler à ceci: xxx

appelant DOSOMNATURED Résultats: < / p> xxx

quelque part dans votre classe principale, vous devez configurer log4j comme d'habitude, par exemple: xxx


1 commentaires

Même lorsque j'utilise tout ce que vous avez suggéré, je ne peux toujours pas me débarrasser de ce gênant "13: 13: 43,428 info [stdout]" devant tout ce que je change dans mon appendeur, vos paramètres fonctionnent, mais seulement après cette partie ..



1
votes

Essayez d'utiliser ce modèle car il vous donnera un message propre:

 <param name="ConversionPattern" value="%d{HH:mm:ss.SSS} %-5p %c %X %m/>


0 commentaires

4
votes

Le info [stdout] est normalement issu de log4j à écouter pour system.out également. Nous avons eu un cas similaire où l'application elle-même avait sa propre configuration log4j et a ainsi obtenu son propre appendeur root. Cela se connecterait à la console qui est écoutée par le JBoss Log4J. Cela ajoute-t-il l'info info [stdout] comme si vous écrivez directement sur System.out (ou Erreur [STDERR] Quand écrire sur < code> system.err ).

La solution dans notre cas a été de supprimer la configuration log4j spécifique de l'application et utilisez simplement celle que JBoss écrit à.

Une autre manière peut être d'écrire directement à un fichier journal spécifique à une application plutôt que d'écrire sur la console. Dans un environnement de serveur, vous vous référez probablement aux fichiers journaux de toute façon.

comme pour la deuxième partie, c'est-à-dire d'étendre automatiquement des journaux avec réponse, demande, etc. Données:

dans un cas Nous avons eu une super catégorie pour des haricots de session apatrides qui ont fourni une fonctionnalité de journalisation et avaient un enregistreur (écrasé) par exemple. Les méthodes de base telles que info appelleraient ensuite l'enregistreur et ajouteront automatiquement les données requises.

Une seconde approche pourrait être mcd , c'est-à-dire que vous mettez certaines données (comme la requête) dans le fil de discussion MDC local (essentiellement une carte), puis les accéder à votre définition de votre modèle.

Par exemple, nous avons plusieurs applications similaires chacune ayant des classes les autres aussi. Nous aurions donc besoin de quelle application est originaire du message et a donc ajouté le nom de l'application au MDC:

dans le code:

MDC.UT ("APP.NAME", "MYAPPLICATION");

dans le modèle log4J config:
(notez le % x {APP.NAME} )

Je n'ai pas testé si vous pouviez faire quelque chose comme mettre la demande dans le MDC, puis utiliser: % x {request.getattribute ('xyz ')} mais s'il obtient simplement la valeur dans le MDC et les appels Tostring () dessus, vous pouvez créer une enveloppe de demande comme ceci: xxx < / pré>

appelez MDC.put ("Demande", nouvelle demandeLogwrapper (Demande)); et dans l'utilisation de configuration % x {requête} .


0 commentaires

0
votes

Pour imprimer uniquement les messages, le modèle de conversion suivant le fera.

<param name="ConversionPattern" value="%m%n"/>


0 commentaires

1
votes

Si vous n'aimez pas le fichier de configuration de Log4J XML, vous pouvez passer à un fichier de propriétés à la place. Vous ne pouvez pas configurer les filtres à l'aide du fichier de propriétés simple, mais comme il semble que vous n'ayez pas besoin d'eux, cela ne devrait pas être un problème.

étant donné que vous êtes

... en train de se développer prochainement pour devenir un service Web de repos (sage fonctionnel) et je veux capturer des bûches vraiment bonnes, afin que je puisse avoir une bonne idée de ce qui se passe où.

J'ai bien peur que votre sortie souhaitée ne vous donne pas beaucoup de perspectives, elle ne fera pas bien échouer, et cela vous fera perdre votre esprit une fois que l'application devient grande ...

Veuillez vous reporter à log4J meilleures pratiques pour une bonne référence de la conception des journaux. Veuillez consulter Tous les paragraphes , y compris la considération cosmétique à la fin. J'espère que cela aide.


0 commentaires