2015-04-20 13 views
5

Pakowałem moją niestandardową wtyczkę log4j2 do osobnego słoika (zawiera tylko klasy wtyczek) i umieściłem ją w ścieżce aplikacji classpath. Ale nie zostanie wykryty.Własna wtyczka Log4j2 (2.1) nie została wykryta przez atrybuty pakietów

Wyszukiwarka Google wykryła, że ​​jest to błąd - parametr "packages" nie jest już używany. Również niektóre linki sugerują kilka alternatyw, w których maven pom.xml i log dat wtyczki log4j2 ma kontekst. Problem polega na tym, że nie znam się na maven i nie mam pojęcia, w jaki sposób generowany jest plik danych. Wiem tylko, że jest on zawarty w log4j-2.1-core.jar, gdzie istniejące wtyczki log4j2 są zdefiniowane w pom.xml.

Czy ktoś może zasugerować mi, jak mogę skonfigurować niestandardową wtyczkę?

poszedłem za pośrednictwem tego - Log4j2 custom plugins - annotation processing with Maven Assembly Plugin

ale nie jest jasne. Podążam za rozwiązaniem, ale nie wiem, w jaki sposób utworzono plik wtyczki dla niestandardowej wtyczki lub gdzie dokładnie muszę wprowadzić zmiany.

+0

Jak określono w poniższej odpowiedzi, nawet javac CustomPlugin.java -cp log4j-core.jar wygeneruje plik Log4j2Plugins.dat. Nie trzeba budować Mavena ani pom.xml. –

Odpowiedz

4

Istnieją dwa sposoby, aby log4j2 znaleźć niestandardową wtyczkę: poprzez atrybut konfiguracji pakietów i poprzez plik dat wtyczki generowany przez javac.

Wariant 1: pakiety przypisują

Nie był stary wersja log4j2 gdzie nie przypisują pakiety działało, ale to was fixed w 2.0.1. To już nie powinno być problemem.

Aby użyć tej opcji, wpisz nazwę pakietu swojej klasy wtyczek w atrybucie packages. Na przykład, jeśli w pełni kwalifikowana nazwa klasy jest com.mycompany.myproduct.MyPlugin swojej wtyczki, a następnie uruchomić plik konfiguracyjny log4j2.xml z

<Configuration status="trace" packages="com.mycompany.myproduct"> 
    ... 

atrybutu status="trace" pokaże wewnętrznych sprawozdań log4j2 debugowania są wyświetlane na konsoli. Może to pomóc w rozwiązywaniu problemów, na przykład, jeśli twoja wtyczka nie zostanie znaleziona.

Opcja 2: plik plugin DAT

Jeśli kompilować ze słoika log4j-rdzeniowego w ścieżce klasy, javac wygeneruje log4j2 wtyczki plik .dat. Maven automatycznie włącza to do twojego słoika, ale jeśli nie używasz maven, możesz dołączyć ten plik do swojego słoika ręcznie. Ponownie, użyj stanu = "trace", aby rozwiązać ewentualne problemy.

Konfiguracja

Po wykonaniu jednej z powyższym log4j2 można znaleźć wtyczki. Następnym krokiem jest prawidłowe skonfigurowanie wtyczki. Możliwe, że to powoduje problem.

Załóżmy Twój plugin jest zwyczaj, wyszukiwanie i wygląda następująco:

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); 
    } 
} 

Teraz ogłosił nazwę wtyczki FabLookup, więc to co trzeba użyć w konfiguracji. Nie nazwa klasy (chociaż jest w porządku, aby były takie same).

przykładową konfigurację za pomocą wtyczki będzie wyglądać następująco:

<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> 
... 

Jeśli powyższe nie jest wystarczające, aby rozwiązać ten problem, należy zakładać nieco więcej szczegółów takiego jak Twój plugin jest zadeklarowana w kodzie Java i jak jest skonfigurowany w twoim log4j2.xml.

+0

Niestandardowa wtyczka wydaje się działać teraz. Używane maven i pom.xml jak zdefiniowano tutaj - https://github.com/mushkevych/log4j2plugin/blob/8962f435c6a21f4bc57d2282cc866bafb8334071/pom.xml –

+0

Teraz myślę, że istnieją dwa pliki log4jPlugin.dat, jeden w rdzeniu i inne w niestandardowym jar, mam nadzieję, że nie spowoduje to żadnych problemów w przyszłości. Na razie wydaje się działać dobrze. @Remko Popma Dzięki za opisową odpowiedź –

+1

Pliki danych wtyczek w oddzielnych plikach jar będą przetwarzane osobno. Nie spowoduje to problemów, chyba że zadeklarujesz wtyczkę z _same name_ jako wbudowaną wtyczką. –

Powiązane problemy