Spring Boot: come posso impostare il livello di registrazione con application.properties?


301

Questa è una domanda molto semplice, ma non riesco a trovare informazioni.
(Forse la mia conoscenza dei framework Java è gravemente carente)

Come posso impostare il livello di registrazione con application.properties?
E la posizione del file di registrazione, ecc.?


1
Per la cronaca, un'altra opzione è quella di impostare il livello di registro come variabile di ambiente, ad esempio tramite la dashboard di heroku. In Settings-> Config Varsimpostato logging.level.com.yourpackagesul livello desiderato (INFO, ERRORE, DEBUG).
LukeSolar,

Risposte:


355

Aggiornamento: a partire da Spring Boot v1.2.0.RELEASE, le impostazioni in application.propertieso application.ymlsi applicano. Vedere la sezione Livelli di registro della guida di riferimento.

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

Per le versioni precedenti di Spring Boot non è possibile. Devi semplicemente usare la normale configurazione per il tuo framework di registrazione (log4j, logback) per quello. Aggiungi il file di configurazione appropriato ( log4j.xmlo logback.xml) alla src/main/resourcesdirectory e configura a tuo piacimento.

È possibile abilitare la registrazione debug specificando --debugquando si avvia l'applicazione dalla riga di comando.

Spring Boot fornisce anche un buon punto di partenza per il logback per configurare alcune impostazioni predefinite, colorare ecc. Il file base.xml che puoi semplicemente includere nel tuo file logback.xml. (Questo è consigliato anche dal logback.xml predefinito in Spring Boot.

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

8
Normalmente tutto ciò che è possibile fare sulla riga di comando funziona in un file di configurazione esterno. Quindi debug = true lo farebbe credo. Quel flag è un po 'speciale perché la registrazione deve essere inizializzata molto presto, ma penso che funzionerebbe.
Dave Syer, il

7
A proposito, il sistema di registrazione preferito è il logback, ed è quello che ottieni di default dai poms di avviamento. Quindi logback.xml è lo strumento più comune per configurare la registrazione in modo dettagliato. Il flag --debug attiva solo alcuni canali di registrazione Spring selezionati.
Dave Syer, il

Un altro consiglio, lo stivale a molla include un bel base.xml . È un bel punto di partenza. (Vedi la mia risposta estesa).
M. Deinum,

@ M.Deinum Grazie ancora per l'ottimo consiglio! Ora posso modificare il livello di registro per il mio codice.
zeodtr,

2
Sembra che possiamo, ora. Per quanto riguarda Spring v4.1.3.RELEASE (con Spring Boot v1.2.0.RELEASE), le impostazioni in application.propertieso application.ymlsi applicano, come ha risposto Richard (modulo the :o =issue --- i due punti sembrano funzionare per me).
Eric Platon,

108

Puoi farlo usando application.properties.

logging.level.=ERROR-> Imposta il livello di registrazione root su errore
...
logging.level.=DEBUG-> Imposta il livello di registrazione root su DEBUG

logging.file=${java.io.tmpdir}/myapp.log-> Imposta il percorso del file di registro assoluto su TMPDIR / myapp.log

Un set predefinito sano di application.properties relativo alla registrazione mediante i profili sarebbe: 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=

Quando sviluppi all'interno del tuo IDE preferito aggiungi semplicemente un -Dspring.profiles.active=devargomento as VM alla configurazione di esecuzione / debug della tua app.

Ciò fornirà errori solo durante la registrazione di produzione e di debug durante lo sviluppo SENZA scrivere l'output in un file di registro. Ciò migliorerà le prestazioni durante lo sviluppo (e salverà le unità SSD alcune ore di funzionamento;)).


1
Il segno '=' per l'assegnazione non ha funzionato. L'assegnazione è stata eseguita con un ':' come separatore. logging.level.:DEBUG
randominstanceOfLivingThing

2
Strano, ho questa installazione che funziona in un progetto di esempio. I segni '' (spazio), '=' e ':' trattati allo stesso modo come separatore, ad eccezione dei casi in cui i separatori vengono utilizzati nelle chiavi. Sei sicuro che la tua chiave non contenga spazi bianchi?
Richard,

1
Può confermare che ":" funziona ma "=" viene ignorato, Modifica: parlato a presto, c'era uno spazio tra "=" e il livello. tutto funziona ora.
Mike R,

1
Questo non funziona nel mio test con spring-boot 1.4.0: logging.level.=DEBUGfarà in modo che l'applicazione non si avvii e ottenga un errore:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang

2
Mi sembra che logging.level.sia solo una scorciatoia sintattica per praticità logging.level.root, che potrebbe essere preferita come (1) meno incline a essere confusa con un errore di battitura, (2) potenzialmente più esplicita e (3) lavorare con il =segno di assegnazione, che fornisce una maggiore coerenza generale al file di configurazione.
Alain BECKER,

66

Il modo corretto di impostare la radice livello di registrazione sta usando la proprietà logging.level.root. Vedi la documentazione , che è stata aggiornata da quando questa domanda è stata originariamente posta.

Esempio:

logging.level.root=WARN

15

Supponiamo che la tua applicazione abbia il nome del pacchetto come com.company.myproject. Quindi è possibile impostare il livello di registrazione per le classi all'interno del progetto come indicato di seguito nei file application.properties

logging.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUGe logging.level.org.hibernate = DEBUGimposterà il livello di registrazione solo per le classi di Spring Framework Web e Hibernate.

Per impostare la posizione del file di registrazione utilizzare

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


14

Se si è in Spring Boot, è possibile aggiungere direttamente le seguenti proprietà nel file application.properties per impostare il livello di registrazione, personalizzare il modello di registrazione e archiviare i registri nel file esterno.

Questi sono diversi livelli di registrazione e il suo ordine dal minimo << massimo.

OFF << FATALE << ERRORE << AVVISO << INFO << DEBUG << TRACCIA << TUTTO

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

Passa attraverso questo link per personalizzare il tuo registro in modo più vivido.

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


Non so perché ma logging.level.tech.hardik = traccia questo non funziona nel mio caso quando inserisco logging.level.roo = traccia funziona
Arvind Kumar

10

Accertarsi che il suggerimento di Dave Syer abbia un po 'di amore, perché l'aggiunta debug=truea application.properties consentirà effettivamente la registrazione del debug.


8

Nel caso in cui si desideri utilizzare un diverso framework di registrazione, ad esempio log4j, ho scoperto che l'approccio più semplice è disabilitare la registrazione propria degli stivali a molla e implementare la propria. In questo modo posso configurare ogni livello di Google in un unico file, log4j.xml (nel mio caso).

Per ottenere ciò devi semplicemente aggiungere quelle righe al tuo 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>

Probabilmente hai già la prima dipendenza e hai solo bisogno delle altre due. Si noti che questo esempio riguarda solo log4j.
Questo è tutto, ora sei pronto per configurare la registrazione per l'avvio nel tuo file di configurazione log4j!


Questa esclusione ha funzionato per me. Le mie API REST non sono state selezionate dalla mia dipendenza log4j e log4j.properties.
ankitjaininfo il

ora hanno anche spring-boot-starter-log4j2
Kalpesh Soni,

4

Puoi provare a impostare il livello di log su DEBUG che mostrerà tutto all'avvio dell'applicazione

logging.level.root=DEBUG

3

Per i record: la documentazione ufficiale , come per Spring Boot v1.2.0.RELEASE e Spring v4.1.3.RELEASE:

Se l'unica modifica che devi apportare alla registrazione è impostare i livelli di vari logger, puoi farlo in application.properties usando il prefisso "logging.level", ad es.

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

È inoltre possibile impostare la posizione di un file su cui accedere (oltre alla console) utilizzando "logging.file".

Per configurare le impostazioni più dettagliate di un sistema di registrazione è necessario utilizzare il formato di configurazione nativo supportato dal sistema di registrazione in questione. Per impostazione predefinita, Spring Boot preleva la configurazione nativa dalla posizione predefinita per il sistema (ad esempio classpath: logback.xml per Logback), ma è possibile impostare la posizione del file di configurazione utilizzando la proprietà "logging.config".


2

Se si desidera impostare ulteriori dettagli, aggiungere un nome file di configurazione del registro "logback.xml" o "logback-spring.xml".

nel tuo file application.properties, inserisci in questo modo:

logging.config: classpath:logback-spring.xml

in loback-spring.xml, inserisci in questo modo:

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

Le risposte esistenti sono grandi. Voglio solo condividere con voi una nuova funzionalità di avvio a molla che consente di raggruppare i registri e impostare il livello di registrazione su tutto il gruppo.

Esempio dai documenti:

  • Creare un gruppo di registrazione
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • Imposta il livello di registrazione per il gruppo
logging.level.tomcat=TRACE

È una bella funzionalità che offre maggiore flessibilità.


2

Nella mia configurazione attuale l'ho definito in application.yaml in questo modo:

logging:
  level:
    ROOT: TRACE

Sto usando lo stivale a molla: 2.2.0.RELEASE. Puoi definire qualsiasi pacchetto che dovrebbe avere un livello TRACE simile.


1
Questo si configura a livello di applicazione. OP vuole tracciare solo per i registri di ibernazione per i quali sarebbe necessario un filtro a livello di pacchetto nelle impostazioni del registro
Sudip Bhandari

2

nel progetto di avvio primaverile possiamo scrivere logging.level.root = WARN ma qui il problema è che dobbiamo riavviare anche se abbiamo aggiunto la dipendenza devtools, nel file delle proprietà se veniamo modificati qualsiasi valore non sarà rilevabile automaticamente, per questa limitazione sono venuto a conoscenza la soluzione i, e possiamo aggiungere un attuatore in pom.xml e passare il livello del logger come mostrato di seguito nel client postino nella barra degli indirizzi http: // localhost: 8080 / loggers / ROOT o http: // localhost: 8080 / loggers / com .mycompany e nel corpo puoi passare il formato json come di seguito

{
  "configuredLevel": "WARN"
}

1

In caso di eclipse IDE e il tuo progetto è fatto, ricordati di pulire e costruire il progetto per riflettere le modifiche.


1

Con Springboot 2 puoi impostare il livello di registrazione root con una variabile d'ambiente come questa:

logging.level.root=DEBUG

Oppure puoi impostare una registrazione specifica per pacchetti come questo:

logging.level.my.package.name=TRACE

per la configurazione delle variabili d'ambiente, preferiresti usare LOGGING_LEVEL_ROOT=DEBUG
:,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.