在像Tomcat这样的Servlet容器中使用JEE版本时,如何禁用Restlet访问日志记录?

时间:2018-12-20 20:04:29

标签: java tomcat restlet-2.3

Restlet框架文档吹捧它可以通过Server类并使用jse库构建独立运行,或者使用jee库构建在Tomcat之类的Servlet容器中运行。

该库可以帮助生成two types of log records,与代码相关的日志记录,以进行调试和错误,并访问与以下内容相关的日志记录:

20-Dec-2018 12:33:01.723 INFO [http-nio-8088-exec-52] org.restlet.engine.log.LogFilter.afterHandle 2018-12-20   12:33:01    0:0:0:0:0:0:0:1 -   0:0:0:0:0:0:0:1 8088    POST    /WebApp/route   -   204 0   647 11619   http://localhost:8088   PostmanRuntime/7.4.0    -

这在具有Engine#setLogLevel(...)的-jse构建的独立模式下很有用。当我在已经有单独访问日志的Tomcat容器内使用-jse构建时,发现这种类似于日志的Apache httpd会带来额外的噪音。不幸的是,Engine#setLogLevel在JEE版本中不存在。

使用简单的Apache Tomcat Restlet JEE example code,在哪里禁用Restlet访问日志的理想位置?

1 个答案:

答案 0 :(得分:0)

在测试了不同的东西之后,使用 Logger.getLogger(“ org.restlet”)。setLevel(Level.WARNING) 是唯一可靠地禁止Restlet访问的东西日志消息。我尝试了org.restlet.engine,org.restlet.engine.og和org.resetlet.engine.log.LogFilter以及各种组件访问方法,但都没有抑制消息。我不确定我是否会抑制自己的力量。似乎如果Engine#setLevel在JEE中不可用,则应该在JEE中默认禁止访问日志记录。

package my.package.space;

import java.util.logging.Level;
import java.util.logging.Logger;
import org.restlet.Application;
import org.restlet.Restlet; // from org.restlet.jee artifact version 2.3.12
import org.restlet.routing.Router;

public class MyJeeApplication extends Application {

    /**
     * Creates a root Restlet that will receive all incoming calls.
     */
    @Override
    public synchronized Restlet createInboundRoot() {
        // Create a router Restlet that routes each call to a new instance of HelloWorldResource.
        Router router = new Router(getContext());
        // Set restlet log level to warning to suppress 
        // INFO org.restlet.engine.log.LogFilter.afterHandle access log messages
        Logger.getLogger("org.restlet").setLevel(Level.WARNING);
        // Defines only one route
        //router.attach("/hello", HelloWorldResource.class);
        router.attachDefault(HelloWorldResource.class);

        return router;
    }

}