当我尝试使用log4j登录进程时,我很困惑,我不知道将记录器放在何处。 现在我将记录器放在servlet中并将其声明为public static,以便每个人都可以使用它。我的过滤器也使用记录器。但我不确定servlet是否会被破坏,记录器是否也会被破坏?
另一个问题,在我的理解中,过滤器是在servlet之前,当我在servlet中创建记录器时,在最开始,过滤器应该不能使用记录器,但是,因为我让过滤器记录了过程中,没有像“记录器不存在”这样的异常,为什么?
记录器的最佳位置是什么?它应该是静态的,也就是说,多个类可以共享一个记录器?我想将filter和servlet的日志放在一起。
答案 0 :(得分:2)
为每个班级创建private static final Logger
。例如,在servlet类中编写以下行:
private static final Logger logger = Logger.getLogger(YourServletClassName.class);
以及过滤器类中的以下行:
private static final Logger logger = Logger.getLogger(YourFilterClassName.class);
注意在getLogger()
方法中作为参数传递的不同值。记录器应为private static
,以便同一类的多个实例可以使用它。这样,您可以按类别控制应用程序的输出。例如,如果您只想查看所有实例YourServletClassName
的输出(尽管通常只创建一个Servlet类实例,它会被重新用于处理每个请求),您可以在log4j.properties中编写以下行:
log4j.logger.your.package.YourServletClassName=TRACE
log4j.logger.your.package.YourFilterClassName=OFF
这样,来自YourServletClassName
的日志将仅显示,YourFilterClassName
不会显示任何内容。希望它有所帮助。
答案 1 :(得分:0)
您应该在每个类中定义一个单独的记录器
static org.apache.log4j.Logger logger = Logger.getLogger(MyClass.class);
这样您的日志文件就会清晰排列,您可以在配置文件中使用正确的类别。