Spring Boot: Jak ustawić poziom rejestrowania za pomocą application.properties?

300

To bardzo proste pytanie, ale nie mogę znaleźć informacji.
(Być może brakuje mi mojej wiedzy na temat środowisk Java)

Jak ustawić poziom rejestrowania za pomocą application.properties?
Lokalizacja logowania pliku itp.?

zeodtr
źródło
1
Dla przypomnienia inną opcją jest ustawienie poziomu dziennika jako zmiennej środowiskowej, na przykład poprzez pulpit nawigacyjny heroku. W Settings-> Config Varsustaw logging.level.com.yourpackageżądany poziom (INFO, BŁĄD, DEBUG).
LukeSolar,

Odpowiedzi:

354

Aktualizacja: Począwszy od wersji Spring Boot 1.2.0. ZWOLNIJ, ustawienia w application.propertieslub application.ymlobowiązują. Zobacz sekcję Poziomy dziennika w podręczniku.

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

W przypadku wcześniejszych wersji Spring Boot nie możesz. W tym celu wystarczy użyć normalnej konfiguracji środowiska rejestrowania (log4j, logback). Dodaj odpowiedni plik konfiguracyjny ( log4j.xmllub logback.xml) do src/main/resourceskatalogu i skonfiguruj według własnych upodobań.

Można włączyć rejestrowanie debugowania, określając --debugpodczas uruchamiania aplikacji z wiersza polecenia.

Spring Boot stanowi również dobry punkt wyjścia dla logback do skonfigurowania niektórych ustawień domyślnych, kolorowania itp. Pliku base.xml , który można po prostu dołączyć do pliku logback.xml. (Jest to również zalecane z domyślnego pliku logback.xml w Spring Boot.

<include resource="org/springframework/boot/logging/logback/base.xml"/>     
M. Deinum
źródło
8
Zwykle wszystko, co można zrobić w wierszu poleceń, działa w zewnętrznym pliku konfiguracyjnym. Tak więc myślę, że debugowanie = prawda by to zrobiło. Ta flaga jest trochę wyjątkowa, ponieważ rejestrowanie musi zostać zainicjowane bardzo wcześnie, ale myślę, że to zadziała.
Dave Syer,
7
BTW preferowanym systemem rejestrowania jest logback, i to domyślnie dostajesz z poms startera. Logback.xml jest więc najczęstszym narzędziem do konfigurowania rejestrowania w drobnoziarnisty sposób. Flaga --debug po prostu włącza wybrane kanały wiosennego logowania.
Dave Syer,
Kolejna wskazówka, wiosenny rozruch zawiera ładny plik base.xml . To dobry punkt wyjścia. (Zobacz moją rozszerzoną odpowiedź).
M. Deinum,
@ M.Deinum Jeszcze raz dziękuję za wspaniałą wskazówkę! Teraz mogę zmienić poziom dziennika dla własnego kodu.
zeodtr
2
Wygląda na to, że możemy teraz. Jeśli chodzi o Spring v4.1.3.RELEASE (z Spring Boot v1.2.0.RELEASE), ustawienia w application.propertieslub application.ymldziałają, zgodnie z odpowiedzią Richarda (modulo :lub =problem --- dwukropek wydaje się działać dla mnie).
Eric Platon,
108

Możesz to zrobić za pomocą pliku application.properties.

logging.level.=ERROR-> Ustawia poziom rejestrowania root na błąd
...
logging.level.=DEBUG-> Ustawia poziom rejestrowania root na DEBUG

logging.file=${java.io.tmpdir}/myapp.log-> Ustawia bezwzględną ścieżkę pliku dziennika na TMPDIR / myapp.log

Domyślny rozsądny zestaw application.properties dotyczący rejestrowania przy użyciu profili to: application.properties:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

application-dev.properties:

logging.level.=DEBUG
logging.file=

Kiedy tworzysz w swoim ulubionym IDE, po prostu dodajesz -Dspring.profiles.active=devargument jako VM do konfiguracji uruchamiania / debugowania twojej aplikacji.

To da ci tylko błąd przy logowaniu produkcyjnym i debugowaniu podczas programowania BEZ zapisywania danych wyjściowych do pliku dziennika. Poprawi to wydajność podczas programowania (i zaoszczędzi dyski SSD kilka godzin pracy;)).

Richard
źródło
1
Znak „=” przypisania nie działał. Przypisanie wykonano za pomocą „:” jako separatora. logging.level.:DEBUG
randominstanceOfLivingThing
2
Dziwne, mam tę konfigurację działającą w przykładowym projekcie. Znaki „” (spacja), „=” i „:” traktowane jednakowo jako separator, z wyjątkiem przypadków, w których separatory są używane w kluczach. Czy na pewno Twój klucz nie zawierał białych spacji?
Richard
1
Potwierdza, że ​​„:” działa, ale „=” jest ignorowane, Edycja: Mówiłem wkrótce, między „=” a poziomem była spacja. wszystko działa teraz.
Mike R
1
To nie działa w moim teście z spring-boot 1.4.0: logging.level.=DEBUGspowoduje, że aplikacja się nie uruchomi i pojawi się błąd:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang
2
Wydaje mi się, że logging.level.jest tylko wygodnym skrótem syntaktycznym logging.level.root, który można preferować jako (1) mniej podatny na pomyłkę z literówką, (2) potencjalnie bardziej wyraźny i (3) pracę ze =znakiem przypisania, który zapewnia większą ogólną spójność do pliku konfiguracyjnego.
Alain BECKER
66

Właściwym sposobem ustawienia głównego poziomu rejestrowania jest użycie właściwości logging.level.root. Zobacz dokumentację , która została zaktualizowana od momentu pierwotnego pytania.

Przykład:

logging.level.root=WARN
Gilbert Arenas Dagger
źródło
15

Załóżmy, że aplikacja ma nazwę pakietu jako com.company.myproject. Następnie możesz ustawić poziom rejestrowania klas w projekcie, jak podano poniżej w plikach application.properties

logowanie.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUGi logging.level.org.hibernate = DEBUGustawi poziom rejestrowania tylko dla klas Spring Framework Web i Hibernacji.

Aby ustawić lokalizację pliku dziennika, użyj

logowanie.plik = /home/ubuntu/myproject.log

shaunthomas999
źródło
14

Jeśli korzystasz z Spring Boot, możesz bezpośrednio dodać następujące właściwości do pliku application.properties , aby ustawić poziom rejestrowania, dostosować wzorzec rejestrowania i przechowywać dzienniki w pliku zewnętrznym.

Są to różne poziomy rejestrowania i ich kolejność od minimum << maksimum.

OFF << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, its won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

Przekaż ten link, aby bardziej dynamicznie dostosować swój dziennik.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

Hardik Patel
źródło
Nie wiem dlaczego, ale logging.level.tech.hardik = prześledzić to nie działa w moim przypadku, kiedy kładę logging.level.roo = prześledzić to działa
Arvind Kumar
10

Upewnienie się, że wskazówka Dave Syer zyska trochę miłości, ponieważ dodanie debug=truedo application.properties rzeczywiście umożliwi rejestrowanie debugowania.

oravecz
źródło
8

Na przykład, jeśli chcesz użyć innej struktury rejestrowania, na przykład log4j, najłatwiejszym sposobem jest wyłączenie rejestrowania własnego rozruchu i wdrożenie własnego. W ten sposób mogę skonfigurować każdy loglevel w jednym pliku, to znaczy log4j.xml (w moim przypadku).

Aby to osiągnąć, wystarczy dodać te linie do pliku pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

Prawdopodobnie masz już pierwszą zależność i potrzebujesz tylko dwóch pozostałych. Pamiętaj, że ten przykład dotyczy tylko log4j.
To wszystko, teraz możesz już skonfigurować rejestrowanie rozruchu w pliku konfiguracyjnym log4j!

atripes
źródło
To wyłączenie działało dla mnie. Moje interfejsy REST nie zostały wybrane moja zależność log4j i log4j.properties.
ankitjaininfo
Mają też teraz spring-boot-starter-log4j2
Kalpesh Soni
4

Możesz spróbować ustawić poziom dziennika na DEBUG, że pokaże wszystko podczas uruchamiania aplikacji

logging.level.root=DEBUG
Ahmed Salem
źródło
3

Do dokumentacji: oficjalna dokumentacja , jak w przypadku Spring Boot v1.2.0.RELEASE i Spring v4.1.3.RELEASE:

Jeśli jedyną zmianą, którą musisz wprowadzić w logowaniu, jest ustawienie poziomów różnych programów rejestrujących, możesz to zrobić w application.properties, używając prefiksu „logowanie.poziom”, np.

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

Możesz także ustawić lokalizację pliku, w którym chcesz się zalogować (oprócz konsoli) za pomocą „logowania.plik”.

Aby skonfigurować bardziej szczegółowe ustawienia systemu rejestrowania, należy użyć rodzimego formatu konfiguracji obsługiwanego przez dany system rejestrowania. Domyślnie Spring Boot pobiera konfigurację natywną z domyślnej lokalizacji systemu (np. Ścieżka klasy: logback.xml dla Logback), ale można ustawić lokalizację pliku konfiguracyjnego za pomocą właściwości „logging.config”.

Eric Platon
źródło
2

Jeśli chcesz ustawić więcej szczegółów, dodaj nazwę pliku konfiguracji dziennika „logback.xml” lub „logback-spring.xml”.

w pliku application.properties wprowadź następujące dane:

logging.config: classpath:logback-spring.xml

w pliku loback-spring.xml wprowadź następujące dane:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

        <root level="INFO">
            <appender-ref ref="ROOT_APPENDER" />
        </root>

    </configuration>
Sheldon Papa
źródło
2

Istniejące odpowiedzi są świetne. Chcę tylko udostępnić Ci nową funkcję wiosennego rozruchu, która pozwala grupować dzienniki i ustawiać poziom rejestrowania dla całej grupy.

Przykład z dokumentów:

  • Utwórz grupę rejestrowania
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • Ustaw poziom rejestrowania dla grupy
logging.level.tomcat=TRACE

To miła funkcja, która zapewnia większą elastyczność.

Martin Choraine
źródło
2

W mojej obecnej konfiguracji mam to zdefiniowane w application.yaml w następujący sposób :

logging:
  level:
    ROOT: TRACE

Używam Spring-boot: 2.2.0. RELEASE. Możesz zdefiniować dowolny pakiet, który powinien mieć taki poziom TRACE.

fascynacja
źródło
1
Konfiguruje się to na poziomie aplikacji. PO chce ślad tylko dla dzienników stan hibernacji dla którego wymagany jest filtr poziomie pakietu w ustawieniach dziennika
Sudip Bhandari
2

w projekcie rozruchu wiosennego możemy napisać logowanie.level.root = OSTRZEŻENIE, ale tutaj jest problem, musimy ponownie uruchomić ponownie, nawet dodaliśmy zależność devtools, w pliku właściwości, jeśli zostanie zmodyfikowana, żadna wartość nie będzie automatycznie wykrywalna, dla tego ograniczenia poznałem rozwiązanie tj. możemy dodać siłownik w pom.xml i przekazać poziom rejestratora, jak pokazano poniżej w kliencie listonosza w pasku adresu URL http: // localhost: 8080 / loggers / ROOT lub http: // localhost: 8080 / loggers / com .mojafirma iw ciele możesz przekazać format json jak poniżej

{
  "configuredLevel": "WARN"
}
Siddartha Kamble
źródło
1

W przypadku zaćmienia IDE, a Twój projekt jest cudowny, pamiętaj o wyczyszczeniu i zbudowaniu projektu, aby odzwierciedlić zmiany.

Sabarish Kumaran.V
źródło
1

Za pomocą Springboot 2 możesz ustawić Poziom rejestrowania katalogu głównego za pomocą Zmiennej Środowiska w następujący sposób:

logging.level.root=DEBUG

Lub możesz ustawić określone rejestrowanie dla pakietów takich jak ten:

logging.level.my.package.name=TRACE
Jakudaba
źródło
do konfiguracji zmiennych środowiskowych wolisz użyć LOGGING_LEVEL_ROOT=DEBUG
:,