我需要一个带有简单接口的记录模块,用于从多个进程到常见的本地日志文件的记录消息。
由于其中一些过程可能同时运行,因此记录模块必须管理这些过程中的冲突写请求。
我知道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
语句。