7
votes

Est-il possible de préfixer toutes les lignes d'une stacktrace dans log4j?

Lorsque vous écrivez

    Aug  9 06:26:13 10.175.60.14 myPrefix: [error] [TP-Processor114] [my.class.Name] message : exception
myPrefix    at fatherOfException
myPrefix    at fatherof_fatherOfException
myPrefix    at fatherof_fatherof_fatherOfException
    ...


0 commentaires

4 Réponses :


0
votes

Écrivez une fonction d'emballage pour le faire pour vous.

private void writeToLogs(String message, Exception excp) {
    logger.error("myPrefix\t" + message, excp);
}


2 commentaires

Merci pour la pointe, mais ce n'est pas ce que je cherche. 1er, il fera plusieurs journaux au lieu d'un. 2ème, je travaille sur un joli grand projet et je ne peux pas imaginer changer tous les logeurs.Log par autre chose. Enfin, votre solution ne préfixule pas la ligne "à" avec le préfixe. Je cherche une solution de configuration log4J.


O OK désolé pour ça. Je ne suis pas trop familier avec log4j, mais quand j'ai fait un rapide Google dessus, j'ai trouvé cela, Logging.apache.org/log4j/1.2/Mog4j/1.2/manual.html , vous l'avez peut-être déjà vu, mais si vous faites défiler jusqu'à la configuration, il peut vous aider. Désolé je ne pouvais pas aider plus.



7
votes

Reportez-vous à la réponse d'Alex car il est un plus propre. strong>

Vous pouvez écrire votre propre implémentation de org.hape.log4j.spi.ththrowablerenderer code>: P >

HTTP: // Logging. apache.org/log4j/1.2/apidocs/org/aplow/log4j/spi/throwablerenderer.html p>

puis, modifiez votre configuration log4j: p>

log4j.themrowablinerender = votre nom-classe-class em> p>

Le loblerenderer code> renvoie un tableau de chaîne code> s. Voici votre code: P>

StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));

List<String> l = new LinkedList<String>();
for (String s: sw.toString().split(System.lineSeparator())) {
    l.add(String.format("%s %s", prefix, s));
}

return (String[]) l.toArray();


4 commentaires

Fonctionne génial, merci! Mais je devais migrer vers Log4J 1.2.16 pour pouvoir faire cela


Cela ne gère pas la classe et le message lancé, ou une cause.


@Alexnauda a édité et ajouté une alternative aussi, merci.


@Alexnauda Votre réponse, cependant, est bien sûr meilleure. Je vais en créer un lien avec le mien.



3
votes

Sous-classe Lancerenderer , par exemple: xxx

ajouter à votre log4j.properties : xxx < / Pré>

Ceci utilise le ParfaudeTthowablerer pour rendre la stacktrace de manière familière avant d'ajouter le préfixe, il inclura donc la classe loveable classe, message et cause .


0 commentaires

0
votes

Voici une solution que j'ai trouvée pour la connexion et j'ai été utilisée. L'API pour l'instant ne vous permet pas de préfixer toutes les lignes de la trace de la pile. Pour les autres lignes, j'ai déjà eu un modèle en place avec un identifiant de suivi. Donc, je devais l'utiliser. Alors ce que j'ai fait est

  1. j'ai créé une CustomLayout étend Layoutbase
  2. Dans la méthode Dolayout, vous pouvez vérifier si vous avez sur l'événement une trowableProxy et à partir de celle que vous pouvez analyser toutes les lignes et ajouter un préfixe. Je viens de vérifier si j'ai sur la ligne mon identifiant de suivi, s'il n'y a pas, je viens de l'ajouter.

    voici le code xxx

    et dans le logback.xml xxx

    et maintenant le StackTrace ressemble à: xxx


0 commentaires