2016-01-28 13 views
6

Piszę niestandardową klasę konfiguracji dziennika, która konfiguruje konkretny moduł obsługi i kojarzy go z programem rejestrującym root i planuje używać go w wielu aplikacjach. Obawiam się, że rzeczywisty kod programu usunie ten program obsługi i zainstaluje inny.Czy możliwe jest sprawdzenie, czy Handler rozpoznał, że został usunięty?

Czy istnieje sposób, w jaki przewodnik może wykryć, że został usunięty z określonego rejestratora, lub czy rejestrator zgłosił, że zmienili się jego współpracownicy?

Moja jedynym rozwiązaniem jest mieć wątek, który będzie regularnie wzywania drwale korzeniowe ładowarki i podłączyć ten moduł obsługi, która jest bardzo brzydki

Odpowiedz

0

Można by utworzyć niestandardowe Logger który zastępuje removeHandler() zrobić żadnej specjalnej obróbki, która Cię potrzebujesz i zaloguj się do tego zamiast do loggera root.

+0

Niestety nie mam kontroli nad rejestratorami - tylko te procedury obsługi, które można utworzyć, oraz plik konfiguracyjny rejestrowania :( – Uri

2

Czy istnieje sposób, w jaki przewodnik może wykryć, że został usunięty z określonego rejestratora, lub czy rejestrator zgłosił, że zmienili się współpracownicy?

Aby utworzyć podklasy Logger, należy utworzyć niestandardowy LogManager. W niektórych środowiskach oczekuj określonego menedżera dzienników, który może nie działać.

Jest jednak kilka hakowatych rzeczy, które możesz wypróbować.

  1. Modyfikowanie procedur obsługi rejestratora wymaga uprawnień do rejestrowania. Uruchom w menedżerze zabezpieczeń SecurityManager, który uniemożliwia dostęp innym wątkom lub utwórz niestandardowy program SecurityManager, który uruchamia niektóre wywołania zwrotne, gdy zażądano kontroli kontroli.

  2. Jeśli można ominąć ten będąc wysoce specyficzne i realizacja kruchy można wykorzystać fakt, że Logger.removeHandler opiera się na wywołanie Handler.equals(Object). Nadpisuj równe wartości w implementacji niestandardowego programu obsługi i użyj parametru Throwable.getStackTrace(), aby sprawdzić ramki, aby sprawdzić, czy równe wartości zostały wywołane z removeHandler. Jeśli tak było, po prostu zwróć false.

Moja jedynym rozwiązaniem jest mieć wątek, który będzie regularnie wzywania drwale korzeniowe ładowarki i podłączyć ten moduł obsługi, która jest bardzo brzydki

Przygotuj się na bardzo brzydki.

+0

Ta odpowiedź sprawiła, że ​​przebiegł mnie dreszcz. –

+0

@ IngoBürk Dodano ostrzeżenia, aby pokazać grę podczas gry. pamiętać o tym, że nie ma żadnego czystego rozwiązania pytania o O. Pomyśl o tej odpowiedzi jako o tym, że kiełbasa jest zrobiona w java.util.logging – jmehrens

+0

Dość uczciwi, usunę mój upadek –

Powiązane problemy