Dobra, udalo sie.. Postanowilam przedstawic tu rozwiazanie poniewaz moze to kiedys komus zaoszczedzic pare h..
Moim problemem bylo to, ze w zaleznosci od tego jaki jest level, taki ma byc appender (ale nie level jako THRESHOLD, czyli jak np INFO to tylko INFO a nie wszystko od INFO wzwyz). Druga sprawa jest - jesli w czasie dziala programu zmienia sie jakies warunki (to moze byc cokolwiek) i w zwiazku z tym musze zmienic sposob logowania to jak zrobic?
Przyklad na czesc pierwsza przedstawiam ponizej:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n" />
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="levelToMatch" value="ERROR" />
<param name="acceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="levelToMatch" value="INFO" />
<param name="acceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.StringMatchFilter">
<param name="StringToMatch" value="test" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<appender name="console2" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p" />
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="levelToMatch" value="WARN" />
<param name="acceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<root>
<level value="info" />
<appender-ref ref="console" />
<appender-ref ref="console2" />
</root>
</log4j:configuration>
czyli w appender "console" mam zdefiniowane dla INFO oraz ERROR, zas w console2 dla WARN.
Teraz kwestia przelaczania appenderow w czasie dzialania programu. Ja to sobie wyobrazalam ze moge zdefiniowac w xmlu (properties) x-appenderow, na starcie oznaczyc jakies tam jako domyslne, a potem przelaczyc to w programie. Ale cala definicje chcialam miec przygotowana juz w xml. Takiego rozwiazania nie udalo mi sie znalezc, moze ktos z Was wie czy tak sie w ogole da? Ale programowo mozna to zrobic tak:
logger.getRootLogger().removeAllAppenders(); //tam jest wiecej tych metod, mozna pokombinowac
//konsolowy nowy appender:
ConsoleAppender consoleAppender =
new ConsoleAppender(
new PatternLayout("[%d{dd-MMM-yyyy HH:mm:ss,SSS}][%p][%t] %l %m%n"));
logger.getRootLogger().addAppender(consoleAppender);
//plik:
FileAppender fileAppender =
new FileAppender(
new PatternLayout("[%d{dd-MMM-yyyy HH:mm:ss,SSS}][%p][%t] %l %m%n"),
System.getProperty("user.dir")+"/mylog.log");
logger.addAppender(fileAppender);
logger.info("test ");
no i "test" wyswietli sie juz wg nowego loggera.
ps.
jesli ktos z Was jest mocny w tym temacie to zapraszam do dyskusji, mam jeszcze pare watpliwosci.
pzdr,
misty