2016-04-29 88 views
5

Sto usando log4j2 (versione - 2.5) e sto provando a scrivere un plugin convertitore di messaggi che maschererà alcuni dei pattern conosciuti del messaggio di log.Come mascherare i messaggi di log log4j2

@Plugin(name = "CustomeMasking", 
     category = "Converter") 
@ConverterKeys({"m"}) 
public class MyCustomFilteringLayout extends LogEventPatternConverter { 
} 

Quando eseguo la mia applicazione web con questo plugin poi vedo questo messaggio avvisa

WARN chiave Converter 'm' è già associata a 'class org.apache.logging.log4j.core .pattern.MessagePatternConverter'. Spiacente, Dave, non posso lasciarti fare quello! Ignora plugin [classe MyCustomFilteringLayout].

Dopo aver esplorato il sito log4j2 ho trovato questi riferimenti.

Reference

Se più convertitori specificano gli stessi ConverterKeys, quindi l'ordine di caricamento sopra determina quale verrà utilizzato. Ad esempio, per si ignora il convertitore di date% fornito dalla classe integrata DatePatternConverter , è necessario collocare il plug-in in un file JAR nel CLASSPATH prima di log4j-core.jar. Questo non è raccomandato; il modello ConverterKeys collisioni causerà l'emissione di un avviso a . Prova a utilizzare ConverterKeys univoci per i tuoi convertitori di modelli personalizzati .

Ho bisogno di aiuto per capire come posso scrivere i miei convertitori personalizzati per m/msg. C'è un modo migliore per farlo?

supplementari Dettagli: mi hanno creato vaso ombreggiata per MyCustomFilteringLayout. Il motivo per cui sto facendo in questo modo è che voglio mantenere la logica di mascheramento separata dall'applicazione.


Aggiornato

ho creato convertitore per il mio tasto che assomiglia a questo,

@Plugin(name = "CustomeMasking", 
      category = "Converter") 
    @ConverterKeys({"cm"}) 
    public class MyCustomFilteringLayout extends LogEventPatternConverter { 
    } 

Qui non riesco a scrivere un altro convertitore per la stessa ConverterKeys - cm? Ora il mio log4j2.xml ha questo modello di layout,

<PatternLayout> 
       <Pattern>%d %p %c{1.} [%t] %cm %ex%n</Pattern> 
      </PatternLayout> 
+0

Mi chiedo semplicemente, puoi semplicemente utilizzare un'altra chiave che non viene presa dal convertitore esistente e modificare di conseguenza il modello di registro? –

+0

Se lo faccio, non sarò in grado di scrivere più convertitori per la mia chiave che penso non risolverà il mio caso d'uso. Il mio caso d'uso è, voglio mascherare determinati modelli dai messaggi di registro e quello che sto pensando è creare molti convertitori per diversi scenari. Sto sbagliando? C'è un modo migliore per farlo? – Shishir

+0

Si presume che si desideri mascherare i dati nell'evento di registro, non impedire l'utilizzo di determinate chiavi del convertitore? Perché non scrivere solo il tuo convertitore utilizzando una chiave di conversione diversa? Non capisco davvero la tua affermazione che non potresti scrivere più convertitori. Forse hai bisogno di spiegare un po 'meglio cosa vuoi ottenere. – rgoers

risposta

3

vostro aggiornamento risolve il problema e risponde alla domanda come sostituire il convertitore messaggio incorporato con uno personalizzato. Ha bisogno di una chiave unica.

Sembra che si desideri parametrizzare il modello. Molti modelli prendono un parametro options. Puoi usarlo per controllare il comportamento, quindi la specifica di% cm {key1} nel modello di layout produrrà risultati diversi da% cm {key2}.

Per un esempio di un convertitore che utilizza parametri, vedere il codice sorgente dello MdcPatternConverter.

+0

Era utile ? –

+0

Grazie per la risposta. È utile – Shishir