问题标签 [log4perl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - Log4perl 日志文件中的双重输出
我正在研究现有 Perl 代码库中的一项新功能,该功能将允许我们记录发送到数据库的命令。我基于 Log4perl 的解决方案,这使我不必重新发明几个轮子。
不幸的是,我遇到了一个障碍:每条消息都被发送到日志文件两次。我希望它停止这样做。
我的研究(谷歌)表明,将相同的消息发送到两个不同的日志文件是一个很常见的问题,但这不是我所看到的。每条消息在单个日志文件中出现两次。
有人对我应该从哪里开始寻找纠正这种行为的方法有任何提示吗?
编辑: 配置文件如下所示:
我希望这是一个漂亮漂亮的 .conf 文件,但我正在使用现有代码。
perl - 深度克隆对象和 Log4perl
我正在使用 Storabledclone()
创建各种复杂对象的副本,这些对象是带有附加 Log4perl 记录器的自我记录。Storable 在遇到 logger 对象时会报错,因为它包含CODE
refs。当我打开序列化代码引用的选项时,我收到不祥的警告
在克隆过程中,克隆对象的记录器不再起作用。
我正在克隆的对象由其他对象组成,记录器可能附加到对象、其组件、它们的子组件等。
理想情况下,我希望克隆过程忽略任何记录器对象。
1)是否有任何 Perl 模块(更)适合这项任务?理想情况下,我希望能够控制递归复制,以便只复制不是记录器的对象或数据片段。
2) ...或者我最好从我的对象中取出对象的自我记录功能(呜咽!)并创建不附加到对象的记录器?
任何建议或见解将不胜感激。
perl - 如何在不同的 log4perl 配置之间切换?
我将 log4perl 与一组脚本和对象一起使用。我希望能够根据命令行或环境参数在不同的日志记录配置之间切换,例如在“详细”模式下,从 INFO 级别向上打印所有消息,将调试消息发送到 STDERR 和其他消息的“调试”模式到 STDOUT,以及抑制除 FATAL 消息之外的所有输出的静默模式。
做这个的最好方式是什么?我应该有几个记录器配置文件并根据脚本运行的模式加载适当的文件吗?如果我正确理解文档,我想更改根记录器的详细程度和阈值,以便所有附加到对象的记录器(即具有类别的记录器)将遵守与根记录器相同的规则。
perl - 当我不再需要 Log4perl 记录器时处理它
我使用 Log4perl 作为包的一部分来捕获特定 DBI 连接正在做什么。我目前的计划是为每个连接创建一个新的记录器对象 via Log::Log4perl->get_logger($mysql_connect_id)
,它应该允许各种连接写入不同的文件或同一个文件,而不会互相搞砸。
我担心的是当连接断开并且不再需要该记录器时会发生什么。如果 Log4perl 只是无限期地保留这些记录器,这听起来像是内存泄漏的秘诀。
在我确定它不再有用之后,摆脱记录器的最佳方法是什么?或者,相反,这甚至是一个问题——Log4perl 是否有某种内置的处理机制已经可以防止这种泄漏?
编辑: 在问题的评论中提到,这里可能值得一提:Log::Log4perl::Logger 有一个
DESTROY
看起来很有希望的方法。但是,它没有记录,并引发了一堆“在字符串 eq 中使用未初始化的值”警告,这让我很警惕;感觉就像一个黑客。(但如果这是最好/唯一的方法,我想问题变成“如何关闭来自特定包的特定警告?”)
perl - Perl 的 Log::Log4perl 的日志级别可以在不更新配置的情况下动态更改吗?
我有一个在 mod_perl 下运行的 Mason 模板,它使用 Log::Log4perl。
我想更改特定附加程序的日志级别,但是更改配置太尴尬了,因为它必须通过我们的部署过程才能上线。
有没有办法在运行时更改附加程序的日志级别,在 Apache 启动之后,而不更改配置文件,然后让该更改影响任何新的 Apache 线程?
perl - 在 Perl 中读取 shell 脚本的控制台输出
假设我有一个名为的 shell 脚本print_error.sh
,如下所示:
现在我在一个 Perl 脚本中,调用这个 shell 脚本
我现在想读取控制台输出print_error.sh
并将其写入Log4perl记录器。
我怎样才能做到这一点?
perl - How can I mock Log::Log4perl::INFO?
I'm writing new unit tests for an existing module that uses Log::Log4perl
like:
The module calls INFO( "important message" );
. I'd like to mock this to verify from my test code that INFO
is called in certain circumstances.
When I run the test module it doesn't capture the calls to INFO
from the module. What's the right way to mock these calls to INFO
?
Here's a complete example:
Mut.pm
Mut.t
perl - 哪个脚本初始化了模块?
在 Perl 中,有没有办法知道哪个 .pl 脚本初始化了这个模块实例?
具体来说,我想获取调用模块的脚本的名称,该模块有一个Log4perl
对象。这样,我就会知道我想在模块中写入哪个 .log 文件。
我做错了吗?如果我$logger
在 .pl 脚本中定义 ,模块内的任何$logger
调用都会写入与调用脚本相同的 .log 文件吗?
我还没有任何示例代码,但一直在阅读Log4perl
. 基本上,如果我将一个 Appender 设置为一个文件 ,caller.log
这是我的调用脚本的文件追加器caller.pl
,我希望自定义导入模块中定义的任何日志记录也写入caller.log
(如果可能的话,隐式地 - 显然我可以初始化模块实例时只需传递日志名称的名称)。
如果不传递参数来指定模块应该写入哪个 File Appender,这是否可能?不只Log4perl
使用一个$logger
实例?
另外,让我知道我是否有出路,以及我是否应该考虑其他方法。
谢谢
编辑:对不起,在我发布这个之后,我查看了相关链接,我想我的搜索措辞不正确。看起来这是一个很好的解决方案:Self logging Perl modules (without Moose)
不过,如果有人有任何其他想法,请告诉我。
编辑 2:终于测试了,并让它按我想要的方式工作——也比想象的要容易得多!
这是我的设置,差不多:
模块.pm
调用者.pl
perl - log4perl 如何同时写入 STDERR 和文件?
我试图设置两个附加程序,但它似乎只写入 STDERR:
perl - 如何在 Perl 中跨模块使用 Log4Perl?
我打算在我的模块中使用 Log4Perl 进行日志记录。
我的代码结构是这样的
我有 Start.PL 可以验证一些参数。我有几个相互关联的模块(PM)文件(在这些 PL 和 PM 文件中使用)
我有一个 Logger.PM,其中有一个创建日志对象的方法 InitiateLogger()
Logger::InitiateLogger();
我在 Start.pl 中调用此方法
这是我的问题
- 如何跨模块使用相同的 $log(PM 文件)
- 我需要为此使用相同的包名吗?
如果有人澄清我这些观点会很好。