[英]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.