gpt4 book ai didi

java - 是否可以让 Handler 认识到它已被删除?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:28:18 25 4
gpt4 key购买 nike

我正在编写一个自定义日志配置类,它设置一个特定的处理程序并将其与根记录器相关联,并计划在多个应用程序中使用它。我担心实际的程序代码会删除该处理程序并安装另一个处理程序。

有没有一种方法可以让处理程序检测到它已从特定记录器中删除,或者让记录器报告关联已更改?

我唯一的其他选择是有一个线程会定期轮询根记录器处理程序并重新连接此处理程序,这非常丑陋

最佳答案

Is there a way that a handler can detect that it had been removed from a particular logger, or for a logger to report that associates have changed?

为了生成 Logger 的子类,您必须创建自定义 LogManager。在某些环境中,需要特定的日志管理器,因此可能无法正常工作。

但是,您可以尝试一些棘手的事情。

  1. 修改记录器处理程序需要记录权限。在阻止其他线程访问的 SecurityManager 下运行,或者创建一个自定义 SecurityManager,在请求日志控制时触发一些回调。

  2. 如果您能克服这个高度实现特定且脆弱的问题,您可以使用 Logger.removeHandler 依赖于调用 Handler.equals(Object) 的事实.在自定义处理程序实现中覆盖 equals 并使用 Throwable.getStackTrace()检查帧以检查是否从 removeHandler 调用了 equals。如果是,则只需返回 false。

My only other alternative is to have a thread that will regularly poll the root loggers handlers and reconnect this handler, which is extremely ugly

为极其丑陋做好准备。

关于java - 是否可以让 Handler 认识到它已被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35071921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com