这可能是一个非常愚蠢的问题,但我似乎无法找到答案。我有一个Tomcat的自定义领域,在上下文级别使用。我想登录失败和成功登录。从自定义Tomcat领域记录
是否有某种方式为我指定一个文件,或者获得现有文件的参考,这将让我写,从该领域的身份验证功能,里面明确的日志行呢?
我试图建立一个log4j的文件和文件JUL并调用getLogger并试图写它,没有运气。我也尝试过getLogger(“catalina”),希望能够访问内部日志记录过程,但也没有运气。从那里得到任何帮助?
这可能是一个非常愚蠢的问题,但我似乎无法找到答案。我有一个Tomcat的自定义领域,在上下文级别使用。我想登录失败和成功登录。从自定义Tomcat领域记录
是否有某种方式为我指定一个文件,或者获得现有文件的参考,这将让我写,从该领域的身份验证功能,里面明确的日志行呢?
我试图建立一个log4j的文件和文件JUL并调用getLogger并试图写它,没有运气。我也尝试过getLogger(“catalina”),希望能够访问内部日志记录过程,但也没有运气。从那里得到任何帮助?
请问您的自定义域扩展org.apache.catalina.realm.RealmBase
?
有一个受保护的属性org.apache.catalina.realm.RealmBase.containerLog
(它是org.apache.juli.logging.Log
的一个实例),您将有权访问该属性。这似乎是登录许多org.apache.catalina.realm.*
实现的方法。
使用containerLog证明非常简单。
的好处是,您可以利用服务器日志记录配置,在Tomcat中7,在使用巨力特别好(如在公共记录的改善)。
我不喜欢的唯一的事情就是API是公共的日志记录,不那么友好为SLF4J的实例。 但是你也可以在log4j上配置slf4j,在这种情况下,你必须在tomcat/lib中添加JAR文件,这样父类装载器在实例化你的领域时就可以看到它们。
一件事,你需要注意:不要登录境界构造的东西!我必须做一些自定义初始化(加载一个自定义文件),我添加了一些基本的日志记录,并以一个讨厌的NullPointer结束 - containerLog不是在构造函数中初始化的,而是在initInternal()方法中初始化的。重写这个,确保你调用了初始化记录器的super.initiInternal(),然后你去了。