当我尝试使用 log4j 记录进程时,我很困惑,我不知道将记录器放在哪里。 现在我已将记录器放入 servlet 中并将其声明为公共(public)静态,以便每个人都可以使用它。我的过滤器也使用记录器。但我不确定如果servlet被销毁,记录器也会被销毁吗?
另一个问题,根据我的理解,过滤器是在servlet之前,当我在servlet中创建记录器时,一开始过滤器不应该能够使用记录器,但是,因为我让过滤器记录过程中,没有出现“记录器不存在”之类的异常,为什么?
记录器的最佳位置是什么?它应该是静态的,即多个类可以共享一个记录器吗?我想将过滤器和servlet的日志放在一起。
最佳答案
为每个类创建一个私有(private)静态最终记录器
。例如,在您的 servlet 类中写入以下行:
private static final Logger logger = Logger.getLogger(YourServletClassName.class);
以及过滤器类中的以下行:
private static final Logger logger = Logger.getLogger(YourFilterClassName.class);
请注意 getLogger()
方法中作为参数传递的不同值。记录器应该是私有(private)静态
,以便同一类的多个实例可以使用它。通过这种方式,您可以按类别控制应用程序的输出。例如,如果您只想查看 YourServletClassName
的所有 个实例的输出(尽管通常只创建 Servlet 类的一个实例,该实例会重复用于处理每个请求),您可以在 log4j.properties 中写入以下行:
log4j.logger.your.package.YourServletClassName=TRACE
log4j.logger.your.package.YourFilterClassName=OFF
这样,将仅显示来自 YourServletClassName
的日志,而不会显示来自 YourFilterClassName
的任何内容。希望对您有所帮助。
关于java - 在 servlet 和过滤器中哪里声明 log4j?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575413/