2014-07-07 7 views
5

Come si stampa una coppia chiave/valore su una voce log4j solo se il valore è impostato su MDC?Come aggiungere in modo condizionale il testo da MDC su un modello LOG4J?

Per esempio, Al momento ho il seguente schema:

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

mi piacerebbe stampare il "client =" parte solo se v'è un valore su MDC per questa chiave.

Per esempio, quando si avvia il mio programma, non ci sarà alcun cliente registrato, quindi i registri sarebbero registrati con questo schema:

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

Tuttavia, dopo che il cliente ha effettuato l'accesso (e dopo che io ho posto MDC con una chiave "client"), ho bisogno di stamparlo utilizzando la seguente:

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

esiste tale "modello con riserva" su log4j?

Grazie

+0

non so una tale funzione, anche in Log4j2 ... Se c'è alcun valore per la chiave per accedere, '% X {client}' produrrà una stringa vuota. Perché non rimuovi 'client =' dal tuo pattern, o aggiungi 'c =' prefisso stringa nel tuo valore? – xav

+0

Hm che potrebbe essere possibile! Ci proverò quando arriverò in ufficio domani. – Matheus208

risposta

3

ho endend utilizzando il suggerimento di XAV.

Ho rimosso la stringa "client =" dal modello log4j e l'ho aggiunta ogni volta che ho aggiunto una voce a MDC. Non è la soluzione più bella ma ha funzionato alla grande!

Per esempio, dove altrimenti userei

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

ora sto usando:

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