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