2014-07-07 6 views
5

Jak wydrukować parę klucz/wartość we wpisie log4j tylko wtedy, gdy wartość jest ustawiona w MDC?Jak warunkowo dodać tekst z MDC na wzorzec LOG4J?

Na przykład, obecnie mam następujący wzór:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - client=%X{client} %m%n 

chciałbym wydrukować „client =” część tylko wtedy, gdy wartość na MDC dla tego klucza.

Na przykład, gdy zaczyna swój program, nie będzie klient zalogowany, więc dzienniki będą rejestrowane za pomocą tego wzoru:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

Jednak po klient zalogowany (a po tym, jak ustawić MDC z kluczem „klient”), muszę wydrukować go za pomocą następujących czynności:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - client=%X{client} %m%n 

Czy istnieje taka „warunkowa wzór” na log4j?

Dziękujemy

+0

Nie znam takiej funkcji, nawet w Log4j2 ... Jeśli nie ma wartości dla klucz do zalogowania, '% X {client}' wytworzy pusty łańcuch. Dlaczego nie usuniesz 'client =' ze swojego wzorca lub dodasz przedrostek 'c =' w swojej wartości? – xav

+0

Hm, które mogą być możliwe! Spróbuję tego, kiedy jutro wejdę do biura. – Matheus208

Odpowiedz

3

Kończę korzystanie z sugestii Xav.

Usunąłem ciąg "client =" z wzorca log4j i dodałem go za każdym razem, gdy dodawałem wpis do MDC. To nie jest najpiękniejsze rozwiązanie, ale działało świetnie!

Na przykład, gdy ja inaczej wykorzystać

MDC.put("client", client.getId()); 

Jestem teraz używając:

MDC.put("client", "client="+client.getId().toString());