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

当我不再需要它时处置Log4perl记录器,第1张

概述我正在使用Log4perl作为程序包的一部分来捕获特定DBI连接正在执行的 *** 作.我目前的计划是通过Log :: Log4perl-> get_logger($ mysql_connect_id)为每个连接创建一个新的记录器对象,这应该允许各种连接写入不同的文件或相同的文件,而不会相互搞砸. 我担心的是当连接断开并且不再需要记录器时会发生什么.如果Log4perl只是无限期地保留这些记录器,那听起来 我正在使用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的一部分.如果您想加快它,请提交补丁.这很简单.

总结

以上是内存溢出为你收集整理的当我不再需要它时处置Log4perl记录器全部内容,希望文章能够帮你解决当我不再需要它时处置Log4perl记录器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存