Jest to możliwe, ale nie tak proste, jak po prostu użycie niektórych wstępnie skonfigurowanych wzorów.
Log4j 1.X i Log4j 2.x nie mają wstępnie skonfigurowanych wzorców do drukowania Identyfikatora nici, ale zawsze możesz użyć "magicznej sztuczki".
PatternLayout
korzysta PatternParser
klasę, która jest znak jako final
klasy i ma mapę statyczne „wzorców” jako klucze i Converters
klasach wartości. Za każdym razem, gdy Parses odnajduje wzorzec przy użyciu formatu wzoru rejestrowania zaczynającego się od %
, używa konwertera dopasowanego do tego wzoru na mapie.
Nie można dodać własne reguły do tej mapie, ale nadal można napisać własny MyOwnPatternLayout:
public class MyOwnPatternLayout extends PatternLayout
które będą w jego format
sposób zrobić taką sztuczkę:
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);
}
Jedyny problem jest to, że musisz w jakiś sposób uzyskać ten identyfikator wątku. Czasem wszystko co musisz zrobić, to do analizowania nazwa wątku czarownicę można w łatwy zbierać:
String threadName = event.getThreadName();
Na przykład Apache Tomcat umieścić identyfikator wątku na końcu nazwy wątku http-nio-/127.0.0.1-8084" -exec-41.
Aby upewnić się, że identyfikator wątku jest poprawny, możesz także utworzyć własną podklasę LogginEvent i Logger (MyLoggingEvent i MyLogger), a wewnątrz MyLogger utworzyć MyLoggingEvent również jako argument ID wątku nie tylko Nazwa wątku. Wtedy możesz łatwo pobrać go w powyższym kodzie.
Przepraszamy za długą odpowiedź i mam nadzieję, że to przynajmniej pomoże.
Próbowałeś z '% I'? – partlov
Tak, próbowałem, ale jak pan mówi poniżej działa tylko dla serwera IBM –
@partlov To nie działa dla mnie, '% i' nie może zostać rozpoznany, używam log4j' 1.2.16'. –