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.?


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"/>     

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;)).


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

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


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


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.


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!


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

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”.


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>

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ść.


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.


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"
}

1

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


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

do konfiguracji zmiennych środowiskowych wolisz użyć LOGGING_LEVEL_ROOT=DEBUG
:,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.