2009-08-07 8 views
9

w moim log4j.properties mam:log4j kieruje całą moc dziennika do stdout, mimo że nie miało

log4j.rootLogger=DEBUG,stdout 

log4j.logger.notRootLogger=DEBUG,somewhereelse 

stdout appenders i somewhereelse są zarówno poprawnie skonfigurowany, stdout pisze do konsoli i somewhereelse zapisuje plik.

W moim kodu w każdej klasie albo ustawić albo:

static Logger log = Logger.getLogger("notRootLogger); 

^Kiedy nie chcę rzeczy dzieje się w konsoli.

LUB

static Logger log = Logger.getRootLogger(); 

^Kiedy robię.

Co muszę zrobić w pliku log4.properties, aby zatrzymać zapisywanie rzeczy notRootLogger na standardowe wyjście? Czy istnieje jakiś rodzaj dziedziczenia, w którym zapisuje się dziennik główny, który musi zostać wyłączony?

Nie chcę konfigurować rejestratora dla każdej pojedynczej klasy, ale chcę zalogować się do konsoli.

Odpowiedz

23

Należy ustawić additivity = false, IIRC. Z log4j manual:

Każdy włączone żądanie logowania za danego rejestratora zostaną przekazane do wszystkich z appenders w tym rejestratorze oraz jak appenders wyżej w hierarchii . Innymi słowy, aplikatory są dziedziczone addytywnie z hierarchii rejestratora. Na przykład, jeśli dodawca konsoli zostanie dodany do loggera root , wszystkie włączone rejestrowanie żądań będzie co najmniej drukowane na konsoli . Jeśli dodatkowo do rejestratora zostanie dodany plik dodający , powiedzmy C, , a następnie włączone żądania rejestrowania dla C , a dzieci C będą drukować na pliku i na konsoli. Możliwe jest nadpisanie tego domyślnego zachowania, więc kumulacja aplikacji pobierającej nie jest już dodatkiem przez ustawienie wartości dodatniej na wartość fałsz.

Spróbuj tego:

log4j.rootLogger=DEBUG,stdout 
log4j.logger.notRootLogger=DEBUG,somewhereelse 
log4j.additivity.notRootLogger=false 
0

Hmm, powinien przeczytać ten krótki wstęp do LOG4J dokładniej

log4j.additivity.notRootLogger=false 

przytwierdza to, ponieważ dziedziczy appenders od drwali nad nim w hierarchii , a rejestr główny jest oczywiście na szczycie hierarchii.

+0

Co to ma wspólnego z optymalizacją? – skaffman

+3

W jaki sposób jest to "przedwczesna optymalizacja"? To wcale nie jest "optymalizacja". Tak się składa, że ​​chcesz innej opcji niż domyślna.Jeśli domyślną wartością addytywności byłaby wartość false, oznaczałoby to, że duża liczba innych osób musiałaby jawnie ustawić ją jako prawdziwą. Podejrzewam, że więcej ludzi chce, żeby było "prawdziwe" niż "fałszywe". –

+0

oczekiwanie jest całkiem jasne, jeśli przeczytałeś dokumentację wstępną log4j lub użyłeś jej –

0

Jeśli właściwości loggera zostały zdefiniowane w klasie java, można wywołać metodę logger.shutdown() na końcu, korzystnie w bloku finally, aby zabronić addytywnego charakteru rejestratora.

Powiązane problemy