2

我只是想在我的项目中禁用 Restlet 到 stdout/stderr 的日志记录,并通过 org.restlet.ext.slf4j 提供的 SLF4J 外观转发所有 Restlet 日志记录。是否有捷径可寻?

4

6 回答 6

4

您首先必须配置 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 在过去十年中无疑发生了变化!

于 2010-10-06T04:53:41.587 回答
3

这就是我为禁用到 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>
于 2011-02-10T10:07:18.443 回答
1

我设法通过以下方式禁用了烦人的 Restlet 日志记录:

Component component = new Component();

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

...

于 2013-08-16T12:34:34.203 回答
0

我倾向于使用jul-to-slf4j桥,但您可以获得其他配置,如Restlet Wiki中所述。

于 2010-09-02T21:14:39.420 回答
0

这里似乎有问题:如果您链接了 org.restlet.ext.slf4j.jar、slf4j-api.jar、logback-core.jar 和 logback-classic.jar,那么您已经拥有了禁用日志记录所需的一切sdout 和标准错误。只需修改配置文件(logback.xml),以免附加到它们。

使用此配置,restlet “本机”使用 slf4j,并且应用通常的 slf4j 配置。

此外,org.restlet.ext.slf4j.jar 消除了对 jul-to-slf4j.jar 的需要,这无论如何都会导致严重的性能损失。

于 2012-02-21T20:22:20.863 回答
0

程序化配置

Engine.setRestletLogLevel(Level.OFF);

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

从 2.1 版开始,现在可以使用 Engine#setLogLevel(...) 和 setRestletLogLevel(...) 静态方法以编程方式更改日志级别。也可以通过设置 Request#loggable 属性或覆盖 LogService#isLoggable(Request) 方法来启用选择性呼叫记录。

于 2014-08-25T13:59:44.543 回答