java - 在 servlet 和过滤器中哪里声明 log4j?

标签 java servlets log4j servlet-filters

当我尝试使用 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/

相关文章:

java - Java(Spring 应用程序)和 C# 之间的数据交换

java - 无法为 New->Servlet 选择项目

java - 无法读取 log4j 属性文件

java - 如何覆盖 log4j.properties 的特定值?

java - 我无法使用sharedPreferences android studio 获取第一个字符串

java - 从字符串中删除所有 'spaces'

java - Tomcat 的 war servlet 中内存泄漏

jsp - 在 Tomcat 7 中,我可以在 <url-pattern> 中使用正则表达式吗?

java - jsp中如何设置log4J配置文件

java - 嵌套异常是 org.hibernate.exception.JDBCConnectionException : Unable to acquire JDBC Connection