2017-11-27 2 views
1

Ich habe ein Spring MVC-Projekt mit Spring Boot (1.5.8.RELEASE) erstellt. Ich wählte web, jpa und mysql und fügte absolut nichts in meinem build.gradle hinzu.Spring Boot Logger protokolliert nichts

Hier ist der relevante Teil meiner application.yml:

logging: 
    level: trace 

Das ist alles, die Konfiguration über die Protokollierung. Ich möchte nur, dass die Protokollmeldungen in der Konsole angezeigt werden, also lasse ich einfach die logging.path weg.

Und ich habe den Controller

package com.example.controllers; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
// other imports ... 

@RestController 
@RequestMapping("/") 
public class DummyController { 

    private static final Logger LOGGER = 
    LoggerFactory.getLogger(DummyController.class); 

    @GetMapping 
    public void foo() { 
    LOGGER.info("foo"); 
    } 
} 

Wenn ich eine Anfrage an / senden, erhalte ich eine 200 OK Antwort, aber nichts erscheint im Protokoll. Seltsamerweise erscheinen die Protokollmeldungen von Spring Framework und Hibernate in der Konsole. Nur meine Ad-hoc-Log-Nachrichten fehlen.

Dann debuggte ich meinen Code und sah, dass der Vorgänger von LOGGER (der Stamm des Logger-Baumes) ein Logger mit Log-Level INFO ist. Das ist anscheinend nicht der Logger, den ich konfiguriert habe. Die offizielle Dokumentation von Spring sagt mir jedoch nicht, wie ich die gewünschte Logger-Instanz bekommen kann. Wie kann ich das machen? Stimmt etwas mit meinem Code nicht oder fehlt etwas in der Konfiguration?

Antwort

0

Die official documentation ist einfach, dass der Root-Logger mit logging.level.root konfiguriert werden kann. Aber Sie können tatsächlich konfigurieren Protokollierung für jedes Paket/Klasse einzeln

logging.level.root=TRACE      # default for everything 
logging.level.com.example.controllers=TRACE # for your controllers package 

ähnlich application.yml:

logging: 
level: 
    root: TRACE 
    com.example.controllers: TRACE 
+0

Dann, wie in meinem Java-Code die Logger Instanz zu bekommen? Es gibt nicht einmal eine Zeile Java-Code auf dieser Seite. – Aetherus

+0

hm, Sie Code sieht gut aus mir, Sie nähern sich 'private statische endgültige Logger LOGGER = LoggerFactory.getLogger (DummyController.class);' gibt Ihnen die Instanz und die empfohlene Möglichkeit zu gehen. Es fühlt sich irgendwie offensichtlich an, also vermisse ich wahrscheinlich etwas. Und ich denke, in dem Code, den Sie oben zeigen, sollte jeder Logger die Meldung "logger.info()" drucken, so dass Sie "foo" sehen sollten, egal, welchen Logging-Hebel Sie haben. Und ich habe gerade dieses neue Projekt überprüft – varren

+0

@Aetherus sind Sie sicher, dass Sie nicht https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot haben -features-custom-log-configuration andere Logging-Dateien in Ihrem Projekt? Und es gibt keinen Java-Code im Frühjahr docs, weil Sie eigentlich Logback verwenden + slf4j https://logback.qos.ch/manual/introduction.html Die erste Zeile im Frühjahr docs besagt, dass Sie einen der vorkonfigurierten Logger wählen können, also dort Es macht keinen Sinn, jeden Logger zu kopieren. Und meine Antwort war nur darauf hinzuweisen, dass Sie yaml ungültig ist und deshalb haben Sie Standard-INFO Root-Logger Eltern – varren