Piotr Nowicki

Piotr Nowicki JFB Systems,
właściciel

Temat: log4j i logowanie z jednego loggera do dwóch miejsc

Witam, próbuje skonfigurować log4j w taki sposób, żeby jeden appender zapisywał mi tylko komunikaty info na konsole, a drugi komunikaty error do pliku. Da się tak zrobić dla jednego loggera? Jak na razie osiągnąłem taki efekt, że komunikaty info i error pojawiają się na konsoli i w pliku jednocześnie. Poniżej mój plik log4j.properties

log4j.rootLogger=INFO, CONSOLE, FILE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Layout=org.apache.log4j.SimpleLayout

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=./log/errorLog.log
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.Append=true
log4j.appender.FILE.MazFileSize=10MB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.Layout=org.apache.log4j.SimpleLayout
log4j.appender.FILE.Treshold=ERROR

jeśli nie ma takiej możliwości dla jednego loggera to mile widziane info jak to skonfigurować dla dwóch loggerów ;-)Piotr Nowicki edytował(a) ten post dnia 25.11.10 o godzinie 16:08
Piotr T.

Piotr T. Spring/Microservices

Temat: log4j i logowanie z jednego loggera do dwóch miejsc

Piotr Nowicki:
Witam, próbuje skonfigurować log4j w taki sposób, żeby jeden appender zapisywał mi tylko komunikaty info na konsole, a drugi komunikaty error do pliku.
.
NIE .Uściślenie (nie da się jeśli używasz pliku properties ;) ).

Zgodnie z manualem log4j http://logging.apache.org/log4j/1.2/manual.html

Cyt. "Basic Selection Rule
A log request of level p in a logger with (either assigned or inherited, >whichever is appropriate) level q, is enabled if p >= q."Piotr T. edytował(a) ten post dnia 30.11.10 o godzinie 23:27
Piotr Nowicki

Piotr Nowicki JFB Systems,
właściciel

Temat: log4j i logowanie z jednego loggera do dwóch miejsc

próbowałem jeszcze kombinować w kodzie w taki sposób:

private static Logger logger = Logger.getLogger(MyClass.class);
public static void writeLogToConsole (String log){
logger.removeAllAppenders();
logger.setLevel(Level.INFO);
logger.addAppender(Logger.getRootLogger().getAppender("CONSOLE"));
logger.info(log);
}
public static void saveErrorLogToFile (String log){
logger.removeAllAppenders();
logger.setLevel(Level.ERROR);
logger.addAppender(Logger.getRootLogger().getAppender("FILE"));
logger.error(log);
}


Ale efekty są zaskakujące, np komunikat z errorem powinno zapisać w pliku tylko raz (jedno wywołanie metody) a są dwie linijki, informacje ze statusem "INFO" również powiela i zapisuje w pliku.

Na konsoli zapisuje powielone informacje "INFO" i wyrzuca komunikat:
log4j:ERROR Attemptet to append to closed appender name [CONSOLE].

Gdzie robię błąd? Czy może takie manipulacje nie są dowzolone?

Pliku z properties nie zmieniałem

konto usunięte

Temat: log4j i logowanie z jednego loggera do dwóch miejsc

Piotr Nowicki:
log4j.appender.FILE.Treshold=ERROR

A gdybys uzyl Threshold? ;-)
Piotr T.

Piotr T. Spring/Microservices

Temat: log4j i logowanie z jednego loggera do dwóch miejsc

"Witam, próbuje skonfigurować log4j w taki sposób, żeby jeden appender zapisywał mi tylko komunikaty info na konsole, a drugi komunikaty error do pliku"
Wlodzimierz Mazur:
Piotr Nowicki:
log4j.appender.FILE.Treshold=ERROR

A gdybys uzyl Threshold? ;-)

No to nie zadziała w ten sposób efekt będzie taki że w pliku znajdą się komunikaty od ERROR do FATAL .
a na konsoli od INFO do FATAL.

Pozdrawiam
Piotr Nowicki

Piotr Nowicki JFB Systems,
właściciel

Temat: log4j i logowanie z jednego loggera do dwóch miejsc

Wlodzimierz Mazur:
Piotr Nowicki:
log4j.appender.FILE.Treshold=ERROR

A gdybys uzyl Threshold? ;-)

To dowodzi, że czasem lepiej zrobić copy-paste niż pisać z palca ;]
A efekt dokładnie taki jak napisał Piotr

Istnieje może jakaś inna biblioteka do logów która pozwala na takie zachowanie jakie chciałem osiągnąć z log4j?Piotr Nowicki edytował(a) ten post dnia 30.11.10 o godzinie 20:39
Piotr T.

Piotr T. Spring/Microservices

Temat: log4j i logowanie z jednego loggera do dwóch miejsc

Poprawka jest gotowiec :
http://logging.apache.org/log4j/1.2/faq.html
"Is it possible to direct log output to different appenders by level? ...
If you must filter events by exact level match, then you can attach a LevelMatchFilter to any appender to filter out logging events by exact level match."

Czyli jest sposób .

Pzdr
--
PS:W javadocu do interfejsu Filter jest ostrzeżenie że konfiguracja powinna być załadowana z pliku w formacie DOM xmlPiotr T. edytował(a) ten post dnia 30.11.10 o godzinie 23:28

Następna dyskusja:

log4j - logowanie do bazy




Wyślij zaproszenie do