È possibile ma non è così facile come utilizzare solo alcuni modelli preconfigurati.
Log4j 1.X e Log4j 2.x non hanno schemi preconfigurati per la stampa ID filettatura ma è sempre possibile utilizzare alcuni "trucchi magici".
PatternLayout
sta usando PatternParser
classe che è marchio come final
classe e ha mappa statica di "pattern" come chiavi e Converters
classi come valori. Ogni volta che Parses trova il pattern utilizzando per il formato del modello di registrazione a partire da %
, utilizza il convertitore che corrisponde a questa chiave del modello nella mappa.
Non puoi aggiungere la tua regola per quella mappa, ma è ancora possibile scrivere il proprio MyOwnPatternLayout:
public class MyOwnPatternLayout extends PatternLayout
che nella sua format
metodo fare tale trucco:
public String format(LoggingEvent event) {
String log = super.format(event);
/*
Now you just have to replace with regex all occurences of %i or
any mark you would like to use as mark to represent Thread ID
with Thread ID value.
Only thing you have to be sure to not use any mark as your Thread ID
that already is defined by PatterParser class
*/
return log.replaceAll("%i", someThreadID);
}
L'unico problema è che devi ottenere quell'ID thread in qualche modo. A volte tutto ciò che dovete fare è quello di analizzare il nome Discussione strega può facilmente si raccolgono:
String threadName = event.getThreadName();
Per esempio Apache-Tomcat messo ID filo alla fine del nome del thread http-nio-/127.0.0.1-8084" -exec-41.
per essere sicuri che ID thread è corretta si può anche fare la propria sottoclasse di LogginEvent e Logger (MyLoggingEvent e myLogger) e dentro myLogger creare strega MyLoggingEvent terrà anche come argomento ID thread non unico filo Nome. Quindi puoi facilmente raccoglierlo nel codice sopra.
Siamo spiacenti per la risposta lunga e spero che questo almeno ti darà un po 'di aiuto.
Avete provato con '% I'? – partlov
Sì, l'ho provato, ma come dici sotto funziona solo per IBM Server –
@partlov Che non funziona per me, '% i' non può essere riconosciuto, sto usando log4j' 1.2.16'. –