Bahar Önyükleme: application.properties ile günlük kaydı seviyesini nasıl ayarlayabilirim?


301

Bu çok basit bir soru, ama bilgi bulamıyorum.
(Belki de Java çerçeveleri hakkındaki bilgim ciddi şekilde eksiktir)

Application.properties ile günlük kaydı seviyesini nasıl ayarlayabilirim?
Ve günlük dosyası konumu, vb?


1
Kayıt için başka bir seçenek de, günlük düzeyini ortam değişkeni olarak ayarlamaktır, örneğin heroku gösterge paneli üzerinden. Gelen Settings-> Config Varsgrubu logging.level.com.yourpackageistenen seviyede (INFO HATA, DEBUG) için.
LukeSolar

Yanıtlar:


355

Güncelleme: Spring Boot v1.2.0'dan başlayarak.RELEASE, içindeki application.propertiesveya application.ymlgeçerli ayarlar geçerlidir. Başvuru kılavuzunun Günlük Düzeyleri bölümüne bakın .

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

Spring Boot'un önceki sürümleri için yapamazsınız. Bunun için günlük çerçevenizde (log4j, logback) normal yapılandırmayı kullanmanız yeterlidir. Dizine uygun yapılandırma dosyasını ( log4j.xmlveya logback.xml) src/main/resourcesekleyin ve beğeninize göre yapılandırın.

--debugUygulamayı komut satırından başlatırken belirterek hata ayıklama günlüğünü etkinleştirebilirsiniz .

Spring Boot ayrıca, logback.xml dosyanıza ekleyebileceğiniz base.xml dosyasını , bazı varsayılanları yapılandırmak, renklendirmek vb.Için iyi bir başlangıç ​​noktası sağlar . (Bu, Spring Boot'daki varsayılan logback.xml dosyasından da önerilir .

<include resource="org/springframework/boot/logging/logback/base.xml"/>     

8
Normalde komut satırında yapabileceğiniz her şey harici bir yapılandırma dosyasında çalışır. Yani debug = true bence yapardı. Bu bayrak biraz özel çünkü günlük kaydı çok erken başlatılmalı, ama bence bu işe yarayacaktır.
Dave Syer

7
BTW tercih edilen kayıt sistemi geri kayıttır ve başlangıç ​​pomplarından varsayılan olarak budur. Logback.xml, günlüğe kaydetmeyi ince taneli bir şekilde yapılandırmak için en yaygın araçtır. --Debug bayrağı, seçilen bazı Spring log kanallarını açar.
Dave Syer

Başka bir ipucu, bahar çizme güzel bir base.xml içerir . Bu güzel bir başlangıç ​​noktası. (Genişletilmiş cevabıma bakın).
M. Deinum

@ M.Deinum Harika ipucunuz için tekrar teşekkür ederiz! Şimdi kendi kodumun günlük seviyesini değiştirebilirim.
zeodtr

2
Şimdi yapabiliriz gibi görünüyor. (Bahar Boot v1.2.0.RELEASE ile) Bahar v4.1.3.RELEASE gelince ayarları application.propertiesveya application.ymlRichard tarafından yanıtlandı olarak uygularım, (modulo :veya =sorunu --- kolon benim için işe görünüyor).
Eric Platon

108

Bunu application.properties dosyasını kullanarak yapabilirsiniz.

logging.level.=ERROR-> Kök günlüğe kaydetme düzeyini hataya ayarlar
...
logging.level.=DEBUG-> Kök günlüğe kaydetme düzeyini DEBUG olarak

logging.file=${java.io.tmpdir}/myapp.logayarlar -> Mutlak günlük dosyası yolunu TMPDIR / myapp.log olarak

ayarlar Profiller kullanarak günlüğe kaydetmeyle ilgili varsayılan bir uygulama.properties: 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=

En sevdiğiniz IDE içinde geliştirdiğinizde -Dspring.profiles.active=dev, uygulamanızın çalıştırma / hata ayıklama yapılandırmasına bir as as VM argümanı eklemeniz yeterlidir.

Bu, çıktıyı bir günlük dosyasına yazmadan, yalnızca üretimde oturum açma ve hata ayıklama günlüğüne hata verecektir. Bu, geliştirme sırasında performansı artıracaktır (ve SSD sürücülerinden birkaç saatlik çalışma tasarrufu sağlayacaktır)).


1
Atama için '=' işareti işe yaramadı. Ödev ayırıcı olarak ':' ile yapıldı. logging.level.:DEBUG
randominstanceOfLivingThing

2
Garip, bu kurulum örnek bir projede çalışıyor. Anahtarlarda ayırıcıların kullanıldığı durumlar dışında '' (boşluk), '=' ve ':' işaretleri ayırıcı olarak eşit muamele görür. Anahtarınızda hiç boşluk olmadığından emin misiniz?
Richard

1
":" Çalıştığını ancak "=" yoksayıldığını onaylayabilir, Düzenleme: Çok yakında konuştu, "=" ile seviye arasında boşluk vardı. şimdi her şey çalışıyor.
Mike R

1
Bu benim test ile çalışmaz spring-boot 1.4.0: logging.level.=DEBUGuygulama başlatılamadı ve hata alma neden olacaktır:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang

2
Bana öyle geliyor ki logging.level., logging.level.root(1) bir yazım hatası ile karıştırılmaya daha az eğilimli, (2) potansiyel olarak daha açık ve (3) =daha genel tutarlılık sağlayan atama işaretiyle çalışmak olarak tercih edilebilecek bir kolaylık sözdizimsel kısayolu. yapılandırma dosyasına.
Alain BECKER

66

Kök günlük kaydı düzeyini ayarlamanın doğru yolu özelliği kullanmaktır logging.level.root. Bu soru ilk olarak sorulduğundan beri güncellenen belgelere bakın .

Misal:

logging.level.root=WARN

15

Uygulamanızın paket adı olarak varsayalım com.company.myproject. Ardından, projenizdeki sınıflar için günlük düzeyini, application.properties dosyalarında aşağıda belirtildiği gibi ayarlayabilirsiniz.

logging.level.com.company.myproject = HATA AYIKLAMA

logging.level.org.springframework.web = DEBUGve logging.level.org.hibernate = DEBUGyalnızca Spring framework web ve Hibernate sınıfları için günlük kaydı düzeyi ayarlar.

Günlük dosyasının konumunu ayarlamak için şunu kullanın:

logging.file = /home/ubuntu/myproject.log


14

Spring Boot kullanıyorsanız , günlük düzeyini ayarlamak, günlük kalıbını özelleştirmek ve günlükleri harici dosyaya kaydetmek için application.properties dosyasına doğrudan aşağıdaki özellikleri ekleyebilirsiniz .

Bunlar, farklı günlük düzeyleri ve sıralaması minimum << maksimum değeridir.

KAPALI << FATAL << HATA << UYARI << BİLGİ << HATA AYIKLAMA << 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"

Günlüğünüzü daha canlı bir şekilde özelleştirmek için lütfen bu bağlantıdan geçin.

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


Neden bilmiyorum ama logging.level.tech.hardik = izleme logging.level.roo = trace koyduğumda bu benim durumumda çalışmıyor
Arvind Kumar

10

Dave Syer ipucunun biraz sevgi aldığından emin olmak, çünkü debug=trueapplication.properties eklenmesi gerçekten hata ayıklama günlüğünü etkinleştirir.


8

Farklı bir günlük çerçevesi kullanmak istiyorsanız, örneğin log4j, en kolay yaklaşımın bahar botlarını kendi günlük kaydını devre dışı bırakmak ve kendiniz uygulamaktır. Bu şekilde her loglevel'i tek bir dosyada, log4j.xml (benim durumumda) yapılandırabilirim.

Bunu başarmak için bu satırları pom.xml dosyasına eklemeniz yeterlidir:

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

Muhtemelen ilk bağımlılığa sahipsiniz ve sadece diğer ikisine ihtiyacınız var. Lütfen bu örneğin yalnızca log4j'yi kapsadığını unutmayın.
Hepsi bu, şimdi log4j yapılandırma dosyanızda önyükleme için günlük kaydını yapılandıracaksınız!


Bu dışlama benim için çalıştı. REST Api'm log4j bağımlılığımı seçmedi ve log4j.properties.
ankitjaininfo

şimdi de bahar-boot-starter-log4j2 var
Soni

4

Günlük düzeyini DEBUG olarak ayarlamayı deneyebilir ve uygulamayı başlatırken her şeyi gösterir

logging.level.root=DEBUG

3

Kayıtlar için: Spring Boot v1.2.0.RELEASE ve Spring v4.1.3 gibi resmi belgeler.

Günlüğe kaydetmede yapmanız gereken tek değişiklik, çeşitli günlüklerin düzeylerini ayarlamaksa, bunu "logging.level" önekini kullanarak application.properties içinde yapabilirsiniz.

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

Ayrıca "logging.file" komutunu kullanarak günlüğe kaydedilecek dosyanın konumunu (konsola ek olarak) da ayarlayabilirsiniz.

Bir günlük sisteminin daha ayrıntılı ayarlarını yapılandırmak için söz konusu LoggingSystem tarafından desteklenen yerel yapılandırma biçimini kullanmanız gerekir. Varsayılan olarak Spring Boot yerel yapılandırmayı sistem için varsayılan konumundan alır (ör. Logpath: logback.xml for Logback), ancak "logging.config" özelliğini kullanarak yapılandırma dosyasının konumunu ayarlayabilirsiniz.


2

Daha fazla ayrıntı ayarlamak istiyorsanız, lütfen "logback.xml" veya "logback-spring.xml" günlük yapılandırma dosyası adını ekleyin.

application.properties dosyanızda şu şekilde giriş yapın:

logging.config: classpath:logback-spring.xml

loback-spring.xml dosyasına şu şekilde giriş yapın:

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

Mevcut cevaplar harika. Sadece günlükleri gruplandırmanıza ve tüm grupta günlük kaydı düzeyini ayarlamanıza izin veren yeni bir yay önyükleme özelliğini paylaşmak istiyorum.

Dokümanlardan örnek:

  • Bir günlük grubu oluşturma
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • Grup için günlük kaydı düzeyini ayarlama
logging.level.tomcat=TRACE

Daha fazla esneklik getiren güzel bir özellik.


2

Mevcut yapılandırmada bu gibi application.yaml tanımlanmış var:

logging:
  level:
    ROOT: TRACE

Spring-boot kullanıyorum: 2.2.0. TRACE seviyesinin böyle olması gereken herhangi bir paketi tanımlayabilirsiniz.


1
Bu uygulama düzeyinde kurulur. OP yalnızca günlük ayarlarında paket düzeyinde bir filtreye ihtiyaç duyacağınız hazırda bekletme günlükleri için iz istiyor
Sudip Bhandari

2

bahar önyükleme projesinde logging.level.root = WARN yazabiliriz ama burada sorun, devtools bağımlılığını eklediğimizde bile yeniden başlatmamız gerekiyor, eğer değiştirilirsek özellik dosyasında otomatik olarak algılanmayacak, bu sınırlama için biliyorum çözüm i, e pom.xml'de aktüatör ekleyebilir ve logger seviyesini url çubuğunda postacı istemcisinde gösterildiği gibi geçirebiliriz http: // localhost: 8080 / loggers / ROOT veya http: // localhost: 8080 / loggers / com .mycompany ve vücutta aşağıdaki gibi json biçimini geçebilirsiniz.

{
  "configuredLevel": "WARN"
}

1

Tutulma IDE'si ve projeniz çok önemliyse, değişiklikleri yansıtmak için projeyi temizlemeyi ve inşa etmeyi unutmayın.


1

Springboot 2 ile kök günlük kaydı Düzeyini şu şekilde bir Ortam Değişkeni ile ayarlayabilirsiniz:

logging.level.root=DEBUG

Veya bunun gibi paketler için özel günlük kaydı ayarlayabilirsiniz:

logging.level.my.package.name=TRACE

ortam değişkenleri yapılandırması için şunu kullanmayı tercih edersiniz: LOGGING_LEVEL_ROOT=DEBUGdeve kutusu sözdizimini kullanarak
Anthony Dahanne
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.