Servlet中的Seam Logger?

时间:2010-11-30 14:19:53

标签: java logging servlets seam

有没有办法在标准Java Servlet中使用Seam Logger?我有一个用于提供内容的servlet,而我的应用程序的其余部分是使用Seam开发的。我希望能够在我的servlet中使用Seam的内置Log功能,就像我对其他基于Seam的类一样。在我的Servlet构造函数中,我尝试调用

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

...但我得到了一个例外。有没有更好的方法将Logger“注入”servlet?我错过了什么?谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

这就是我在测试中使用的内容。

答案 1 :(得分:2)

要使用Seam上下文,您可以使用doPost包裹doGetContextualHttpServletRequest方法,以便进行组件查找。

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通常由@Logger注释注入,我检查了源包的日志,没有可以查找@Name注释的组件。如果从包装的上下文中调用一个组件(带有@Logger),则会注入一个记录器(进入被调用的组件)。


Seam在其组件中使用:

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