寻找Log4perl备选方案,以便从多个进程进行并发日志记录

时间:2015-05-02 20:57:47

标签: perl logging

我需要一个带有简单接口的日志记录模块,用于将来自多个进程的消息记录到公共本地日志文件中。

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

我知道Log::Log4perl,但每当我尝试使用它时,我最终会得到一个非常复杂的日志记录界面。我正在寻找替代方案。有什么建议吗?

我查看了Log::Message,这是AFAICT Perl核心模块中唯一包含的日志记录模块(遗憾的是,IMO)。我发现它根本没有表明它处理并发性。

我也尝试过搜索CPAN以寻找替代方案,但只是搜索“Log ::'在模块下产生超过3000次点击,没有特别的顺序。即使扫描此列表也是不切实际的,更不用说阅读可能的候选人的文档,并尝试那些看起来很有希望的人。 (我想知道在CPAN中找到一个合理的日志记录模块的难度是什么让人们自己滚动,他们稍后提交给CPAN,从而在已经无法修复的大量日志模块中增加了一个项目。我,我们可能有这是一个失控增长的案例。)

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

这是我的意思的一个例子"一个简单的界面" (当然,我不希望我在那里找到一个提供这个确切界面的模块;当然,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

1 个答案:

答案 0 :(得分:3)

使用Figure A1, Page 1011 here的{p> Log::Any可以解决问题。

use Log::Any qw( $log );

在您的应用程序中设置此项。您的应用程序使用的任何模块,

Log4perl

稍后,如果您想切换到use Log::Any::Adapter,则只需更改{{1}}声明。