Java Servlet中的Seam记录器?

Java Servlet中的Seam记录器?,java,logging,servlets,seam,Java,Logging,Servlets,Seam,有没有办法在标准Javaservlet中使用Seam记录器?我有一个servlet用于提供内容,而我的应用程序的其余部分是使用Seam开发的。我希望能够在我的servlet中使用Seam的内置日志功能,这与我对其他基于Seam的类所做的相同。在我的Servlet构造函数中,我尝试调用 Log logger = (Log)Component.getInstance(Log.class); …但我有个例外。有没有更好的方法将记录器“注入”到servlet中?我错过了什么?谢谢 要使用Seam上下文

有没有办法在标准Javaservlet中使用Seam记录器?我有一个servlet用于提供内容,而我的应用程序的其余部分是使用Seam开发的。我希望能够在我的servlet中使用Seam的内置日志功能,这与我对其他基于Seam的类所做的相同。在我的Servlet构造函数中,我尝试调用

Log logger = (Log)Component.getInstance(Log.class);

…但我有个例外。有没有更好的方法将记录器“注入”到servlet中?我错过了什么?谢谢

要使用Seam上下文,您可以将
doPost
doGet
方法与
ContextualHttpServletRequest
包装在一起,这允许您进行组件查找

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        final HttpServletRequest req = request;
        new ContextualHttpServletRequest( req ) {
            public void process() throws Exception {
                wrappedPost( req );
            }
        }.run();
    }

// you renamed original doPost method
private void wrappedPost(HttpServletRequest request) {
...
}
上面的示例代码允许您按名称访问组件,这些组件是使用名称注释声明的:

@Name("MyCcomponent")
记录器通常由
@Logger
注释注入,我检查了日志源程序包,没有可以查找的带有
@Name
注释的组件。如果从包装的上下文调用组件(使用@Logger),则会将记录器注入(被调用的组件内容中)


Seam在其组件中使用:

private static final LogProvider log = Logging
            .getLogProvider(MailSession.class);

我没有测试过,但你可以试试这个:

Log mylog = Logging.getLogger(MyClass.class);

这就是我在测试中使用的方法。

非常有效!谢谢对我来说,作为
logmylog=Logging.getLog(MyClass.class)工作