Threshold dla logowania ustawianego programowo

0

Czesc, mam taki problem: w czasie dzialania programow (z powodow w ktore nie bede wnikac) musze dodac FileAppender. I ogolnie wszystko ok, kod moj wyglada tak:

 
                String pattern = "jakis tam moj pattern";
                FileAppender fileAppender = new FileAppender(new PatternLayout(pattern),
                       logFile);

                LevelMatchFilter matchFilter = new LevelMatchFilter();
                String level = "INFO";
                matchFilter.setLevelToMatch(level);

                fileAppender.addFilter(matchFilter);
                fileAppender.addFilter(new DenyAllFilter());

                logger.getRootLogger().addAppender(fileAppender);

tylko ze ustawiajac "INFO" loguje mi tylko INFO, a nie INFO wzwyz (czyli warningi, errory itd). Czy moge programowo ustawiac progi? Oraz czy moge dodac ze np tylko INFO i ERROR? Czy za kazdym razem wtedy musze tworzyc nowy FileAppender z nowym LevelMatchFilter ustawionym na level taki jak chce? Czyli np jesli potrzebuje INFO i ERROR to tworze dwa.

pzdr,
misty

0

Z dokumentacji:

org.apache.log4j.spi.Filter

Users should extend this class to implement customized logging event filtering.

wniosek:
Napisz subklase org.apache.log4j.spi.Filter i tam implementujesz metode #decide(...), a w niej pożądane przez Ciebie zachowanie, a później dodajesz taki appender i jeżeli powinno być po problemie

LevelMatchFilter właśnie zezwala na logi które mają DOKŁADNIE poziom jaki został ustawiony. Przydatne to jest, w przypadku kiedy chcesz kierować logi o konkretnych poziomach do innych appenderów.

0

hmm, ok przejrze to. Ale szczerze to sadzilam ze jest jakas klasa ktora ustawie sobie threshold. Troche sie dziwie ze trzeba az implementowac wlasna klase do czegos takiego..

0

no to jeżeli to jeżeli poważnie chcesz iść po linii najmniejszego oporu, to korzystaj a log api które siedzi w samym jdk. Tam lvl możesz ustawić na appender, logger itp - tam loguje od progu w góre

No to mi sie chyba pomieszalo z java.util.logging i tym progiem. Myslalam ze w log4j tez tak jest.
No dobra, ale to mamy taka sytuacje: w pliku properties zapisany jest ten prog (tzn level, np "INFO" ale dla uzytkownika powinno to miec sens progu).
Wiec tak na prawde czy zastosuje tutaj podejscie takie ze np podaje te levele po przecinku:

progi=LEVEL,WARNING,DEBUG

i potem sobie dla kazdego z nich (w aplikacji) tworze LevelMatchFilter i dodam do mojego FileAppendera

czy napisze sobie klase dziedziczaca po Filter i to dodam do FileAppendera to juz w sumie obojetne.. ale mimo wszystko dziwi mnie ze tak podstawowa funkcjonalnosc musze jeszcze dodatkowo oprogramowywac.

0

Dobra, wiedzialam ze ustawienie progu musi byc :)
Ogolnie zmienilam FileAppender na RollingFileAppender bo i tak ma kilka dodatkowych metod ktore mi sie przydadza. I tam juz jest metoda setThreshold :)

pzdr :)

0

A dlaczego dodajesz jakiegos filtra a nie wywolasz FileAppender.setthreshold?

0

Ale wówczas jeżeli dojdą nowe poziomy logowania (bo ilość i rodzaj poziomów nie jest narzucony, to już tych nowych leveli nie obsłużysz a być może powinieneś (bo są "wyżej" niż próg).
Poziomy natomiast, można przekształcać na inty (metoda Priority#toInt()) , a wówczas jeden "if" i po sprawie - może być nawet jako klasa anonimowa

0

@Mucka

Juz uzywam :) No nie moglam jej znalezc ;))

@Antoniosss
Po pierwsze jestem Ona :)
Po drugie - wlasnie ten threshold mi zalatwia to co chce. Napisane jest w dokumentacji:

**public void setThreshold(Priority threshold)

Set the threshold level. All log events with lower level than the threshold level are ignored by the appender. **

A oto mi wlasnie chodzilo :)

pzdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1