寻找一个log4perl替代方案,以从多个过程中并发日志记录



我需要一个带有简单接口的记录模块,用于从多个进程到常见的本地日志文件的记录消息。

由于其中一些过程可能同时运行,因此记录模块必须管理这些过程中的冲突写请求。

我知道Log::Log4perl,但是每次尝试使用它时,我都会获得一个非常复杂的记录接口。我正在寻找另一种选择。有什么建议吗?


我研究了Log::Message,这是Perl的核心模块中唯一包含的日志记录模块(可悲的是,IMO)。我没有发现它完全处理并发。

我还尝试搜索CPAN寻找替代方案,但仅在没有特定顺序的3000次命中的模块下搜索" log ::"。即使扫描此列表也是不切实际的,更不用说为可能的候选人阅读文档,并尝试那些看起来很有希望的文档。(我想知道在CPAN中找到合理的伐木模块的困难是让人们自己滚动的原因,后来他们会提交给CPAN,从而在已经无法掩盖的登录模块中增加了一件项目。这里的一个失控增长的案例。)


我正在寻找简单接口。理想情况下,所有设置(例如,日志文件,日志级别等的路径)将通过全球共享的~/.*rc -3型配置文件和/或环境变量完成。

这是我所说的"简单界面"的示例(尽管,我当然不希望我在那里找到一个提供此确切接口的模块;而且,当然,EasyLog也是一个化妆名称;如果已经存在该名称的模块,那是一个巧合):

#!/usr/bin/env perl
# some/script.pl
use strict;
use EasyLog ':all';
...
DEBUG "cwd: " + Cwd::cwd();
...
WARN "skipping empty line $.";
...
FATAL "timeout";  # maybe calls exit ?

然后,在某些文件$ENV{ EASYLOG_PATH }中,我会看到

之类的行
30031   1430599390  /path/to/some/script.pl 2   INFO    Starting script.pl on Sat May  2 16:43:10 2015
30031   1430599429  /path/to/some/script.pl 19  WARN    skipping empty line 898
30036   1430599542  /path/to/some/script.pl 2   INFO    Starting script.pl on Sat May  2 16:45:42 2015
30031   1430599583  /path/to/some/script.pl 94  INFO    script.pl terminated normally on Sat May  2 16:46:23 2015
30036   1430599583  /path/to/some/script.pl 32  FATAL   timeout
use Log::Any::Adapter (
    File => $ENV{ EASYLOG_PATH }
    log_level => 'warn',
);

将其设置在您的应用程序中。您的应用程序使用的任何模块

use Log::Any qw( $log );

以后,如果要切换到Log4perl,则只需要更改use Log::Any::Adapter语句。

最新更新