2015-04-20 9 views
5

Ho inserito il mio plug-in personalizzato log4j2 in un jar separato (contiene solo classi di plug-in) e l'ho messo nel classpath dell'applicazione. Ma non viene rilevato.Log4j2 (2.1) plug-in personalizzato non rilevato dall'attributo packages

I googlossi hanno rilevato che si tratta di un errore: il parametro "pacchetti" non viene più utilizzato. Inoltre alcuni link hanno suggerito alcune alternative in cui maven pom.xml e un file dat di plugin log4j2 sono nel contesto. Il problema è che non ho familiarità con Maven e non ho idea di come viene generato il file dat. So solo che è incluso in log4j-2.1-core.jar dove i plugin log4j2 esistenti sono definiti in pom.xml.

Qualcuno potrebbe suggerirmi come posso far funzionare il mio plug-in personalizzato?

mi ha attraversato questo - Log4j2 custom plugins - annotation processing with Maven Assembly Plugin

Ma non è chiaro. Sto seguendo la soluzione, ma non sono sicuro di come il file dat di plugin sia creato per il plugin personalizzato o dove esattamente ho bisogno di apportare le modifiche.

+0

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 –

risposta

4

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.

+0

Il plugin personalizzato sembra funzionare ora .. Usato maven e pom.xml come definito qui - https://github.com/mushkevych/log4j2plugin/blob/8962f435c6a21f4bc57d2282cc866bafb8334071/pom.xml –

+0

Ora suppongo che ci siano due file log4jPlugin.dat, uno nel nucleo e altro in un vaso personalizzato, speriamo che questo non causerà problemi in futuro. Per ora sembra funzionare bene. @Remko Popma Grazie per una risposta descrittiva –

+1

I file di dati dei plugin in file jar separati verranno elaborati separatamente. Ciò non causerà problemi a meno che tu dichiari un plug-in con _some name_ come plug-in integrato. –