3

这可能是一个非常愚蠢的问题,但我似乎无法找到答案。我有一个用于 Tomcat 的自定义领域,在上下文级别使用。我想记录失败和成功的登录。

有什么方法可以让我指定一个文件,或者获取对现有文件的引用,这将让我从领域的身份验证函数内部向它写入显式的日志行?

我尝试设置一个 log4j 文件和一个 JUL 文件并调用 getLogger 并尝试写入它,但没有运气。我还尝试了 getLogger("catalina") ,希望我也可以在没有运气的情况下访问内部日志记录过程。有什么帮助吗?

4

2 回答 2

0

事实证明,使用 containerLog 非常简单。

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

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

您还需要注意一件事:不要在领域构造函数中记录任何内容!我必须进行一些自定义初始化(加载自定义文件)并添加一些基本日志记录并以讨厌的 NullPointer 结束 - containerLog 不是在构造函数中初始化,而是在方法 initInternal() 中初始化。覆盖它,确保调用初始化记录器的 super.initiInternal () ,然后就可以了。

于 2013-07-31T13:52:39.297 回答
0

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

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

于 2013-01-22T22:26:47.490 回答