我正在编写一个自定义日志配置类,它设置一个特定的处理程序并将其与根记录器关联,并计划在多个应用程序中使用它。我担心实际的程序代码会删除该处理程序并安装另一个处理程序。
有没有一种方法可以让处理程序检测到它已从特定记录器中删除,或者让记录器报告关联已更改?
我唯一的其他选择是有一个线程定期轮询根记录器处理程序并重新连接该处理程序,这是非常丑陋的
有没有一种方法可以让处理程序检测到它已从特定记录器中删除,或者让记录器报告关联已更改?
为了生成 Logger 的子类,您必须创建一个自定义 LogManager。在某些环境中需要特定的日志管理器,因此这可能不起作用。
但是,您可以尝试一些技巧。
修改记录器处理程序需要日志记录权限。在 SecurityManager 下运行,该 SecurityManager 可以阻止其他线程访问,也可以创建一个自定义 SecurityManager,在请求日志控制时触发一些回调。
如果你能克服这个存在高度实施特定且脆弱您可以使用 Logger.removeHandler 依赖于调用的事实处理程序.equals(对象) http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)。在自定义处理程序实现中覆盖 equals 并使用Throwable.getStackTrace() http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#getStackTrace()检查帧以检查是否从removeHandler调用了equals。如果是则简单地返回 false。
我唯一的其他选择是有一个线程定期轮询根记录器处理程序并重新连接该处理程序,这是非常丑陋的
做好极其丑陋的准备。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)