簡體   English   中英

如何在 Restlet 2.0 中禁用登錄?

[英]How can I disable logging in Restlet 2.0?

我只是想在我的項目中禁用 Restlet 的 stdout/stderr 日志記錄,並通過 org.restlet.ext.slf4j 提供的 SLF4J 外觀轉發所有 Restlet 日志記錄。 是否有捷徑可尋?

您首先必須配置 SLF4J 以攔截 Restlet 對 java.util.logging API 的所有調用,並將它們映射到 SLF4J 外觀的 API 上的調用。 正如@Bruno指出的那樣,您只需將jul-to-slf4j.jar放在您的類路徑中即可完成此操作。

其次,您必須配置 SLF4J 外觀以將其 API 調用轉發到日志記錄實現以執行實際的日志消息生成。 要使用 Logback 日志記錄實現,請將logback-classic.jar放入類路徑

最后,您必須配置您選擇的日志記錄實現。 如果您使用的是 Logback,則可以使用 XML調整各個 Logger 的日志記錄級別。

我們將 SLF4J 與 Restlet 一起使用,並且非常喜歡 SLF4J 如何將所有不同的日志 API 統一為一個。 這是很不錯的。

2019 年 4 月 29 日編輯:請務必查看@NaftuliKay 和@stempler 的評論,Restlet 在過去十年中無疑發生了變化!

這就是我禁用 STDERR 日志記錄並將日志記錄轉發到 log4j 所做的工作。 基本上它只是一個基類,所有restlet都基於它。 它將安裝 log4j 網橋,找到控制台處理程序並禁用它。 對我有用,但可能不是最好的解決方案,所以如果有人有更好的解決方案,不需要外部配置,請告訴我。

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

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>

我設法通過以下方式禁用了煩人的 Restlet 日志記錄:

Component component = new Component();

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

...

程序化配置

Engine.setRestletLogLevel(Level.OFF);

詳情: http : //restlet.com/learn/guide/2.2/editions/jse/logging

從 2.1 版開始,現在可以使用 Engine#setLogLevel(…) 和 setRestletLogLevel(…) 靜態方法以編程方式更改日志級別。 還可以通過設置 Request#loggable 屬性或覆蓋 LogService#isLoggable(Request) 方法來啟用選擇性呼叫日志記錄。

我傾向於使用jul-to-slf4j橋接器,但您可以獲得其他配置,如Restlet Wiki 中所述

這里似乎有問題:如果您鏈接了 org.restlet.ext.slf4j.jar、slf4j-api.jar、logback-core.jar 和 logback-classic.jar,那么您已經擁有了禁用日志記錄所需的一切sdout 和 stderr。 只需修改配置文件 (logback.xml) 以免附加到它們。

使用此配置,restlet“本地”使用 slf4j 並且通常的 slf4j 配置適用。

此外,org.restlet.ext.slf4j.jar 消除了對 jul-to-slf4j.jar 的需要,這會導致嚴重的性能下降。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM