Wygląda to na błąd niedbalstwa, ale nie mogę znaleźć przyczyny. Logowanie za pomocą logback / slf4j (najnowsza wersja slf4j-api-1.6.1, logback core / classic 0.9.24). Najprostsza konfiguracja dziennika do testowania to:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
<pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>
Każda konfiguracja dziennika rozpoczyna się od wewnętrznych linii stanu wylogowania:
11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
11:21:28,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
11:21:28,180 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [layout] on top of the object stack.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - This appender no longer admits a layout as a sub-component, set an encoder instead.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
11:21:28,207 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
11:21:28,207 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
czyli zgodnie z dokumentacją format, którego logback używa domyślnie. Następnie kończy odczytywanie konfiguracji (która jest skonfigurowana do wyprowadzania innego formatu) i kontynuuje z prawidłowo sformatowanym wyjściem. Istnieje parametr konfiguracyjny, <configuration debug="false">
który nie ma na to wpływu.
Czy ktoś wie, jak to wyłączyć?
Odpowiedzi:
Jeśli ustawisz
debug
atrybutconfiguration
elementu natrue
, otrzymasz wszystkie informacje o statusie do konsoli. Jeśli to jest twój problem, po prostu ustaw go na fałsz lub usuń.Jeśli masz jakiekolwiek problemy z konfiguracją poziomu
WARN
lub wyższego, otrzymasz również wszystkie informacje o statusie zarejestrowane na konsoli (w tym komunikaty poziomuINFO
). Najlepszym rozwiązaniem tego problemu jest naprawienie problemu (w Twoim przypadku zastąpienie<layout>
elementu<encoder>
elementem).Jeśli z jakiegoś powodu nie możesz rozwiązać problemu, ale chcesz usunąć informacje o stanie z konsoli, możesz zamiast tego skonfigurować alternatywę
StatusListener
. Użyj,NopStatusListener
aby całkowicie usunąć informacje o statusie:źródło
INFO
komunikaty dziennika też znikną, ale w rzeczywistości tak. Wiem, że odpowiedź tak mówi, ale z jakiegoś powodu nie było to dla mnie jasne. Żeby było jasne: napraw problem z koderem / układem, a nie tylko znikną komunikaty ostrzegawcze, ale także komunikaty informacyjne, nawet jeśli nie są one związane z problemem.Tak jak opisano w dokumentacji , jeśli podczas analizowania pliku konfiguracyjnego wystąpią ostrzeżenia lub błędy, logback automatycznie wydrukuje dane o stanie na konsoli.
Postępuj zgodnie z http://logback.qos.ch/codes.html#layoutInsteadOfEncoder, tj. Odsyłaczem wymienionym przez logback w komunikacie ostrzegawczym. Po wykonaniu opisanych tam czynności, czyli zastąpieniu elementu <layout> elementem <encoder>, logback przestanie wyświetlać komunikaty na konsoli.
źródło
debug="true"
atrybutu wconfiguration
elemencielogback.xml
. Wspomnij o tym dla dobra innych osób, które wpadną w tę dziurę!Odpowiedź Ceki jest poprawna:
Gdy dobrze to zrobisz, w pierwszych wierszach dziennika nie będzie już żadnych zanieczyszczeń.
Od marca 2015 r. W Logback 1.1.2 musisz używać
<encoder>
podkomponentu -<layout>
jest teraz przestarzały i jeśli go użyjesz, pojawią się komunikaty o błędach. Nie możesz tego kontrolować, jest to domyślne zachowanie Logback .Nazwy niektórych klas wewnętrznych również zostały zmienione, a nawet przykłady na ich stronach podręcznika są nieaktualne!
Oto fragment kodu ze strony pomocy dotyczącej kodu błędów , która zawiera poprawny sposób konfiguracji programu rejestrującego. To rozwiązało problem całkowicie w moim projekcie. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
źródło
Zrozumiałem, że Steve znalazł poprawkę, ale nie wspomniał o tym w wątku. Jeśli jakakolwiek inna osoba napotka ten sam problem, tutaj jest poprawka.
Zastąpić "<>" Układ elementów z "<koder> .. </ koder>"
Winowajcą jest: <layout class = "ch.qos.logback.classic.PatternLayout">
źródło
Sam zmagałem się z tym samym problemem, tj. Na początku zarejestrowano kilka linii, które nie były związane z moim kodem. Oto jak to naprawiłem.
To działa z następującym wpisem w pom.xml
źródło
Wydaje się, że jest to naprawione w wersji 0.9.29. Właśnie wykonałem kilka testów. Żadnych joranskich INFO już. Wydaje mi się, że to jest ustalenie zobowiązania.
źródło
Miałem ten sam problem, kiedy dodałem tę linię
w logbacku i udało się
źródło
Próbowałem wszystkiego i nic mi nie pomogło. Mój problem był spowodowany wieloma plikami logback.xml w mojej ścieżce klas. Jest to częsty przypadek w projektach wielomodułowych. Gdy w ścieżce klas znajduje się tylko jeden plik logback.xml, nie ma niejednoznaczności i problem został rozwiązany.
źródło
Używanie
logback.groovy
:statusListener(NopStatusListener)
(wsrc/test/resources/logback.groovy
) działa.(Prawidłowy przypadek użycia to np. Praca z ANT w Eclipse, korzystanie z logowania logback, klas groovy i testów jednostkowych, w których testy jednostkowe przyjmują
src/test/resources/logback.groovy
, ale zobaczą równieżsrc/main/resources/logback.groovy
(lub podobne), których nie można wykluczyć (jeśli mówi się, że ścieżka klas ANT używa ścieżki klas projektów).)źródło
Wolę używać nasłuchiwania statusu, aby wyłączyć własne dzienniki logowania:
Ale jak wspomniano, NopStatusListener zapobiega również wyświetlaniu ostrzeżeń i błędów. Możesz więc napisać własny odbiornik statusu ręcznie i zmienić poziom dziennika:
Następnie użyj go w swoim pliku logback.xml:
źródło