Mój zespół pracuje nad wtyczką do NetBeans, która używa logowania do określonego pliku. System rejestrowania wykorzystuje SLF4J + Log4J2; tylko informacje o konfiguracji, że jestem świadomy jest plikiem log4j2.xml
z właściwości rejestrowania dla wtyczki i dodaje:Jak prawidłowo zarządzać cyklem życia logów utworzonych za pomocą wtyczek za pomocą logowania Java z log4j2
LoggerContext loggerContext = (LoggerContext)LogManager.getContext(false);
loggerContext.reconfigure();
(Fakt, że używam slf4j i NetBeans naprawdę nie jest istotne tutaj).
Pytanie, które mam, to, jaki jest właściwy sposób rozpoczęcia rejestrowania po uruchomieniu wtyczki i zatrzymaniu rejestrowania po wyjściu wtyczki? (JVM utrzymuje się na zabawę z NetBeans więc pliki dziennika nie są automatycznie zamykane.)
Spojrzałam LoggerContext
i widzę stop()
i terminate()
metod, ale nie mogę znaleźć żadnej dokumentacji, jak aplikacje mają używać LoggerContext
, więc nie wiem, czy ten materiał jest wewnętrznym szczegółem, czy czymś, co powinna użyć aplikacja.
Niektóre bardziej specyficzne szczegóły:
Nasz plugin cyklu wyglądał na poniższym wykresie (tylko jedna instancja jest dopuszczalne, aby uruchomić na raz). "A" i "B" odnoszą się do konfiguracji logów, które chcielibyśmy zastosować.
[Something starts within the JVM to load log4j classes first.
It might be our plugin, it might be something else.
A log4j's default mechanism kicks in to create log configuration A]
|
| [time passes]
|
| [our plugin starts]
A [log4j classes first loaded,
| default mechanism kicks in to create log configuration A]
A setup log configuration B
A B log event 1
A B log event 2
A B log event 3
A shutdown log configuration B
| [our plugin exits]
|
| [time passes]
|
| [our plugin starts]
A setup log configuration B
A B log event 1
A B log event 2
A B log event 3
A shutdown log configuration B
| [our plugin exits]
|
| [time passes]
|
[JVM exits]
Konfiguracja A jest skojarzona z JVM i jest domyślną konfiguracją utworzoną przez log4j przy pierwszym ładowaniu przez maszynę JVM.
Konfiguracja B jest zarządzana programowo przez wtyczkę i powinna mieć jawne uruchomienie/wyłączenie niezależnie od konfiguracji A (i nie powinno to wpłynąć na konfigurację A).
Czy jest jakiś sposób osiągnięcia tego z log4j 2.0?
Czy chcesz, aby dwie konfiguracje dzienników były aktywne jednocześnie? Tak właśnie wygląda diagram z aktywnymi A i B podczas zdarzeń dziennika 1, 2 i 3 ... –
Tak. Nie chcemy, aby wtyczka zakłócała globalną konfigurację rejestrowania (np. "Loguj wszystkie zdarzenia ERROR do dziennika globalnego"), ale wtyczka musi skonfigurować własny kontekst zdarzeń wtyczek. –