如何在Restlet 2.0中禁用日志记录?

时间:2010-08-29 21:27:22

标签: java restlet restlet-2.0

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

6 个答案:

答案 0 :(得分:3)

首先必须配置SLF4J来拦截所有Restlet对java.util.logging API的调用,并将它们映射到SLF4J facade的API上的调用。你只需将jul-to-slf4j.jar放在类路径中,就像@Bruno所说的那样。

其次,您必须配置SLF4J Facade以将其API调用转发到日志记录实现,以执行实际的日志消息生成。要使用Logback日志记录实现,请将logback-classic.jar放入类路径

最后,您必须配置所选的日志记录实施。如果您正在使用Logback,则可以调整各个Loggers using XML的日志记录级别。

我们正在将SLF4J与Restlet一起使用,并且非常喜欢SLF4J如何将所有不同的日志API统一为一体。非常好。

编辑2019年4月29日:请务必查看@NaftuliKay和@stempler的评论。

答案 1 :(得分: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>

答案 2 :(得分:1)

我设法通过以下方式禁用恼人的Restlet记录:

Component component = new Component();

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

...

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这里似乎有些错误:如果您将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的需要,无论如何都会导致严重的性能损失。

答案 5 :(得分: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)方法来启用选择性呼叫记录。