这可能是一个非常愚蠢的问题,但我似乎无法找到答案。我有一个用于 Tomcat 的自定义领域,在上下文级别使用。我想记录失败和成功的登录。
有什么方法可以让我指定一个文件,或者获取对现有文件的引用,这将让我从领域的身份验证函数内部向它写入显式的日志行?
我尝试设置一个 log4j 文件和一个 JUL 文件并调用 getLogger 并尝试写入它,但没有运气。我还尝试了 getLogger("catalina") ,希望我也可以在没有运气的情况下访问内部日志记录过程。有什么帮助吗?
事实证明,使用 containerLog 非常简单。
好处是您可以利用服务器日志配置,这在使用 JULI 的 Tomcat 7 中特别好(作为对公共日志的改进)。
我唯一不喜欢的是 API 是公共日志记录的 API,不像 slf4j 那样友好。但是您也可以通过 log4j 配置 slf4j,在这种情况下,您必须在 tomcat/lib 中添加 JAR 文件,以便父类加载器在实例化您的领域时看到它们。
您还需要注意一件事:不要在领域构造函数中记录任何内容!我必须进行一些自定义初始化(加载自定义文件)并添加一些基本日志记录并以讨厌的 NullPointer 结束 - containerLog 不是在构造函数中初始化,而是在方法 initInternal() 中初始化。覆盖它,确保调用初始化记录器的 super.initiInternal () ,然后就可以了。
您是否自定义 Realm 扩展org.apache.catalina.realm.RealmBase
?
您可以访问一个受保护的属性org.apache.catalina.realm.RealmBase.containerLog
(它是 的一个实例)。org.apache.juli.logging.Log
这似乎是登录许多org.apache.catalina.realm.*
实现的方法。