加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

当我不再需要它时处置Log4perl记录器

发布时间:2020-12-15 23:23:31 所属栏目:大数据 来源:网络整理
导读:我正在使用Log4perl作为程序包的一部分来捕获特定DBI连接正在执行的操作.我目前的计划是通过Log :: Log4perl- get_logger($ mysql_connect_id)为每个连接创建一个新的记录器对象,这应该允许各种连接写入不同的文件或相同的文件,而不会相互搞砸. 我担心的是当
我正在使用Log4perl作为程序包的一部分来捕获特定DBI连接正在执行的操作.我目前的计划是通过Log :: Log4perl-> get_logger($ mysql_connect_id)为每个连接创建一个新的记录器对象,这应该允许各种连接写入不同的文件或相同的文件,而不会相互搞砸.

我担心的是当连接断开并且不再需要记录器时会发生什么.如果Log4perl只是无限期地保留这些记录器,那听起来像是内存泄漏的秘诀.

在我确定它不再有用之后,摆脱记录器的最佳方法是什么?或者,相反,这甚至是一个问题 – Log4perl是否有某种内置的处理机制,已经防止了这种泄漏?

编辑:在一个问题的评论中提到,这里可能值得一提:Log :: Log4perl :: Logger有一个看起来很有希望的DESTROY方法.但是,它没有记录,并且引发了一堆“在字符串eq中使用未初始化的值”警告,这让我很谨慎;感觉就像一个黑客. (但如果这是最佳/唯一的方法,我想问题是“如何关闭来自特定包裹的特定警告?”)

解决方法

我看到的唯一方法是操作Log :: Log4perl :: Logger的内部缓存.

delete $Log::Log4perl::Logger::LOGGERS_BY_NAME->{$category};

这是“安全的”,因为它可以与当前版本的Log :: Log4perl一起使用,但不安全,因为它可能会破坏更新.这是之前由另一个SO用户建议的,但他们删除了它.

我建议您make a feature request能够删除单个缓存条目作为API的一部分.如果您想加快它,请提交补丁.这很简单.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读