【问题标题】:Seam Logger inside a Servlet?Servlet中的Seam Logger?
【发布时间】:2011-05-17 21:55:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: java logging servlets seam


    【解决方案1】:

    要使用 Seam 上下文,您可以使用 ContextualHttpServletRequest 包装 doPostdoGet 方法,这允许您进行组件查找。

    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注解注入的,我查看logs源码包,没有可以查到@Name注解的组件。如果你从包装的上下文中调用一个组件(使用@Logger),一个记录器将被注入(到被调用的组件中)。


    Seam 在其组件中使用:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 工作就像一个魅力!谢谢!!
      • 对我来说是Log mylog = Logging.getLog(MyClass.class);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2012-09-06
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多