Frage

Ich möchte einfach zu deaktivieren Restlet die Protokollierung zu stdout / stderr in meinem Projekt und leitet alle Restlet Protokollierung durch die SLF4J Fassade von org.restlet.ext.slf4j zur Verfügung gestellt. Gibt es eine einfache Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Sie müssen zuerst configure SLF4J abfangen alle von Restlet die Anrufe an die java.util.logging APIs und ordnet sie in fordert die stattdessen APIs der SLF4J Fassade. Sie tun dies einfach, indem jul-to-slf4j.jar in Ihrem Classpath, wie @Bruno zur Kenntnis genommen.

Zweitens müssen Sie die SLF4J Fassade konfigurieren seine API-Aufrufe auf eine Logging-Implementierung zu übermitteln die tatsächliche Log-Nachricht Generation zu tun. So verwenden Sie die Logback Protokollierung Implementierung, fallen Sie logback-classic.jar in Ihrem Classpath

Schließlich müssen Sie Ihre ausgewählten Protokollierungs Implementierung konfigurieren. Wenn Sie Logback verwenden, können Sie die Protokollierungsstufe der einzelnen Loggers einstellen mit XML .

Wir verwenden SLF4J mit Restlet und mag wirklich, wie SLF4J vereint alle die verschiedenen Logging-APIs in einem. Es ist sehr schön.

Bearbeiten 29. April 2019:. Seien Sie sicher, dass die Kommentare von @NaftuliKay und @stempler überprüfen

Andere Tipps

Das ist, was ich tat, die Protokollierung zu STDERR deaktivieren und die Protokollierung zu log4j weiterleiten. es ist im Grunde nur eine Basisklasse, von der alle restlets basieren. Es wird die log4j Brücke, finden Sie den Konsolentreiber installieren und deaktivieren. Arbeiten für mich, aber vielleicht nicht die beste Lösung sein, so dass, wenn jemand eine bessere Lösung hat, die keine externe Konfiguration erfordert, lassen Sie es mich wissen.

public class CommonRestlet extends Application {

static {
    // Install logging bridge (JUL -> LOG4J)
    SLF4JBridgeHandler.install();

    // Disable annoying console logging of requests..
    Logger logger = Logger.getLogger("org.restlet");
    for (Handler handler : logger.getParent().getHandlers()) {
        // Find the console handler
        if (handler.getClass().equals(java.util.logging.ConsoleHandler.class)) {
            // set level to SEVERE. We could disable it completely with 
            // a custom filter but this is good enough.
            handler.setLevel(Level.SEVERE);
        }
    }
}
// Other common stuff here...
}

Dependency in pom.xml

    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jul-to-slf4j</artifactId>
       <version>1.6.1</version>
    </dependency>
    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.6.1</version>
       <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
       </exclusions>
    </dependency>

ich es geschafft, die lästige Restlet Protokollierung zu deaktivieren, indem Sie:

Component component = new Component();

// Disable damn log
component.setLogService(new org.restlet.service.LogService(false));

...

Ich neige dazu, die jul-to-slf4j Brücke zu verwenden, aber Sie können andere bekommen Konfigurationen, wie auf der beschriebenen Restlet Wiki .

Etwas scheint hier falsch: Wenn Sie die org.restlet.ext.slf4j.jar, slf4j-api.jar haben, logback-core.jar und logback-classic.jar verknüpft in, haben Sie bereits alles, was Sie brauchen, um deaktivieren der Protokollierung zu SDOUT und stderr. Einfach ändern Sie die Konfigurationsdatei (logback.xml), um nicht zu ihnen anzuhängen.

Mit dieser Konfiguration Restlet wird mit slf4j „nativ“ und der üblichen slf4j Konfiguration gilt.

Auch die org.restlet.ext.slf4j.jar Beseitigt die Notwendigkeit für den jul-to-slf4j.jar, die eine ernsthafte Leistung getroffen ohnehin entstehen würde.

Programmatische Konfiguration

Engine.setRestletLogLevel(Level.OFF);

Details: http://restlet.com/learn/guide/2.2/ Ausgaben / jse / logging

Seit Version 2.1 ist es nun möglich, programmatisch die Protokollebene zu ändern, um die Maschine # setLogLevel mit (...) und setRestletLogLevel (...) statischen Methoden. Es ist auch möglich, selektive Anrufprotokollierung zu aktivieren, indem die Anfrage # speicherbare-Eigenschaft oder von den LogService # isLoggable (Request) Methode überschrieben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top