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

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

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

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

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

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

这就是我禁用日志记录到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中的依赖关系

   org.slf4j jul-to-slf4j 1.6.1   org.slf4j slf4j-log4j12 1.6.1   log4j log4j    

我设法禁用恼人的Restlet记录:

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

我倾向于使用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的需要,无论如何都会导致严重的性能损失。

程序化配置

 Engine.setRestletLogLevel(Level.OFF); 

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

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