Ci sono due modi per rendere log4j2 trovare il tuo plugin personalizzato: attraverso l'attributo di configurazione dei pacchetti e attraverso un file dat di plugin generato da javac.
Opzione 1: i pacchetti attribuiscono
C'era una vecchia versione di log4j2 in cui non è più l'attributo pacchetti funzionato, ma questo was fixed in 2.0.1. Questo non dovrebbe essere più un problema.
Per utilizzare questa opzione, inserire il nome del pacchetto della classe del plugin nell'attributo packages
. Ad esempio, se il nome completo della classe del plugin è com.mycompany.myproduct.MyPlugin
, quindi avviare il file di configurazione log4j2.xml con
<Configuration status="trace" packages="com.mycompany.myproduct">
...
L'attributo status="trace"
mostrerà dichiarazioni log4j2 di debug interne viene mostrato sulla console. Ciò può aiutare a risolvere eventuali problemi, ad esempio se il tuo plug-in non viene trovato.
Opzione 2: il file plugin dat
Se si compila con il vaso log4j-core nel classpath, javac genererà un log4j2 plug file dat. Maven includerà automaticamente questo nel tuo barattolo, ma se non usi Maven puoi includere questo file nel tuo jar manualmente. Ancora una volta, usa status = "trace" per risolvere i problemi se necessario.
configurazione
Dopo aver fatto uno di quanto sopra, log4j2 riesce a trovare il plugin. Il prossimo passo è configurare correttamente il tuo plugin. È possibile che questo stia causando il problema.
Supponiamo che il plugin è una ricerca personalizzata e si presenta così:
package com.mycompany.myproduct;
@Plugin(name = "FabLookup", category = StrLookup.CATEGORY)
public class BetterLookup extends AbstractLookup {
@Override
public String lookup(final LogEvent event, final String key) {
return com.mycompany.SomeClass.getValue(key);
}
}
Ora, è dichiarato il nome del plug-in FabLookup
, quindi questo è ciò che è necessario utilizzare nella configurazione. Non il nome della classe (anche se va bene che siano uguali).
un esempio di configurazione utilizzando il plugin sarebbe simile a questa:
<Configuration status="trace" packages="com.mycompany.myproduct">
...
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}.log.gz">
<!-- use custom lookups to access arbitrary internal system info -->
<PatternLayout header="${FabLookup:key1} ${FabLookup:key2}">
<Pattern>%d %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
...
Se quanto sopra non è sufficiente a risolvere il problema, si prega di inviare un po 'più in dettaglio come il modo in cui il plugin è dichiarata nel codice Java e come è configurato nel tuo log4j2.xml.
Come specificato nella risposta di seguito, anche javac CustomPlugin.java -cp log4j-core.jar genererà il file Log4j2Plugins.dat. Non è necessario un Maven build o pom.xml –