Jak mogę skonfigurować Logback, aby rejestrował różne poziomy rejestratora w różnych miejscach docelowych?
Na przykład, biorąc pod uwagę następującą konfigurację Logback, czy Logback zarejestruje INFO
wiadomości do STDOUT
i ERROR
wiadomości do STDERR
?
(Zauważ, że ten przykład jest odmianą przykładu logback-examples/src/main/java/chapters/configuration/sample4.xml
pokazanego w Rozdziale 3: Konfiguracja Logback ).
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDERR"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
<target>System.err</target>
</appender>
<!-- What is the effective level of "chapters.configuration"? -->
<logger name="chapters.configuration" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="chapters.configuration" level="ERROR" additivity="false">
<appender-ref ref="STDERR" />
</logger>
<!-- turn OFF all logging (children can override) -->
<root level="OFF">
<appender-ref ref="STDOUT" />
</root>
</configuration>
levels are ordered as follows: TRACE < DEBUG < INFO < WARN < ERROR.
Odpowiedzi:
Aktualizacja: Aby zapoznać się z podejściem opartym na całej konfiguracji przy użyciu Groovy, zobacz odpowiedź Deana Hillera .
-
Dzięki filtrom Logback możesz zrobić kilka interesujących rzeczy . Poniższa konfiguracja wypisze ostrzeżenia i komunikaty o błędach tylko na stderr, a wszystko inne na stdout.
logback.xml
com.foo.StdOutFilter
com.foo.ErrOutFilter
źródło
Uważam, że byłoby to najprostsze rozwiązanie:
źródło
ThresholdFilter
s.<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
jaka jest rzeczywista rola określania<root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="STDERR" /> </root>
w logback.xml?<onMatch>
i<onMismatch>
nie są zdefiniowane dlaThresholdFilter
. Po prostu je usuń, a będzie działać zgodnie z przeznaczeniem.Rozwiązanie oparte tylko na konfiguracji , z ThresoldFilter i LevelFilters, aby wszystko było naprawdę proste do zrozumienia :
źródło
ThresoldFilter
.ThresoldFilter
STDOUT zamiast pięciuLevelFilter
?okej, oto mój ulubiony sposób na zrobienie tego w XML. Robię to dla wersji Eclipse, więc mogę
iz jakiegoś powodu SO nie pokazuje tego wszystkiego poprawnie, ale większość wydaje się tam być ...
źródło
logback.groovy
wersja tej linii wyglądu?Najprostszym rozwiązaniem jest użycie
ThresholdFilter
na aplikatorach:Pełny przykład:
Aktualizacja: Jak wskazał Mike w komentarzu, wiadomości z poziomem ERROR są tutaj drukowane zarówno do STDOUT, jak i STDERR. Nie jestem jednak pewien, jaki był zamiar PO. Możesz spróbować odpowiedzi Mike'a, jeśli nie tego chciałeś.
źródło
To jest konfiguracja, której używam, która działa dobrze, jest oparta na XML + JaninoEventEvaluator (wymaga dodania biblioteki Janino do Classpath)
źródło
Używam logback.groovy do skonfigurowania mojego logbacka, ale możesz to zrobić również z konfiguracją xml:
Myślę, że użycie GEventEvaluator jest prostsze, ponieważ nie ma potrzeby tworzenia klas filtrów.
Przepraszam za mój angielski!
źródło
Spróbuj tego. Możesz po prostu użyć wbudowanych
ThresholdFilter
iLevelFilter
. Nie ma potrzeby programowego tworzenia własnych filtrów. W tym przykładzie poziomy WARN i ERROR są rejestrowane w System.err, a reszta w System.out:źródło
Nie przypisuję sobie zasługi za tę odpowiedź, ponieważ jest to tylko połączenie dwóch najlepszych odpowiedzi powyżej: tej X. Wo Satuk i tej autorstwa Sébastiena Helberta:
ThresholdFilter
jest cudowna, ale nie można jej skonfigurować tak, aby miała wyższy poziom, a także niższy poziom *, ale połączenie go z dwomaLevelFilters
ustawionymi na „DENY”WARN
iERROR
działa świetnie.Bardzo ważne : nie zapomnij
<target>System.err</target>
tagu w appenderze STDERR: moje pominięcie go frustrowało mnie na kilka minut.* ma jednak metodę
decide
w API, ale nie mam pojęcia, jak jej użyjesz w tym kontekście.źródło
Bez programowania. konfiguracja ułatwi Ci życie.
Poniżej znajduje się konfiguracja, która rejestruje różne poziomy logów do różnych plików
źródło
źródło
Przykład wyprowadzania kolorowych komunikatów poziomu „INFO” lub wyższego do konsoli i komunikatów poziomu „WARN” lub wyższego do pliku .
Twój plik logback.xml :
źródło