从自定义Tomcat领域记录

时间:2012-08-29 18:51:33

标签: tomcat logging

这可能是一个非常愚蠢的问题,但我似乎找不到答案。我有一个自定义的Tomcat Realm,在Context级别使用。我想记录失败和成功的登录。

我是否可以通过某种方式指定文件或获取对现有文件的引用,这样我就可以从Realm的身份验证函数中为其写入显式的日志行?

我试过设置一个log4j文件和一个JUL文件并调用getLogger并尝试写入它,没有运气。我也试过getLogger(“catalina”)希望我能访问内部日志记录过程,但也没有运气。来自那里的任何帮助?

2 个答案:

答案 0 :(得分:0)

你自定义Realm是否扩展org.apache.catalina.realm.RealmBase

您可以访问受保护的属性org.apache.catalina.realm.RealmBase.containerLogorg.apache.juli.logging.Log的实例)。这似乎是登录许多org.apache.catalina.realm.*实现的方法。

答案 1 :(得分:0)

使用containerLog证明非常简单。

好处是您可以利用服务器日志记录配置,尤其是在使用JULI的Tomcat 7中(作为对公共日志记录的改进)。

我唯一不喜欢的是API是公共日志记录,不像slf4j那样友好。 但是你也可以在log4j上配置slf4j,在这种情况下你必须在tomcat / lib中添加JAR文件,以便父类加载器在实例化你的领域时看到它们。

还有一件事需要注意:不要在领域构造函数中记录任何内容!我不得不做一些自定义初始化(加载一个自定义文件),我添加了一些基本的日志记录,并以令人讨厌的NullPointer结束 - 在构造函数中没有初始化containerLog,但是在方法initInternal()中。覆盖它,确保你调用super.initiInternal()来初始化记录器,然后你去。