有没有办法在标准Java Servlet中使用Seam Logger?我有一个用于提供内容的servlet,而我的应用程序的其余部分是使用Seam开发的。我希望能够在我的servlet中使用Seam的内置Log功能,就像我对其他基于Seam的类一样。在我的Servlet构造函数中,我尝试调用
Log logger = (Log)Component.getInstance(Log.class);
...但我得到了一个例外。有没有更好的方法将Logger“注入”servlet?我错过了什么?谢谢!
答案 0 :(得分:3)
我没有测试过,但你可以试试这个:
Log mylog = Logging.getLogger(MyClass.class);
这就是我在测试中使用的内容。
答案 1 :(得分:2)
要使用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通常由@Logger
注释注入,我检查了源包的日志,没有可以查找@Name
注释的组件。如果从包装的上下文中调用一个组件(带有@Logger),则会注入一个记录器(进入被调用的组件)。
Seam在其组件中使用:
private static final LogProvider log = Logging
.getLogProvider(MailSession.class);