首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何终止日志::Log4perl

如何终止日志::Log4perl
EN

Stack Overflow用户
提问于 2017-01-04 21:37:31
回答 1查看 49关注 0票数 0

我有一个根目录,其中包含多个子目录。我需要遍历所有这些子目录并处理它的文件。我使用Log::Log4perl记录处理期间发出的消息。不使用多处理/分叉。

到目前为止还不错,但关键在于:在处理给定子目录期间发出的日志消息必须记录到单独的日志文件中,这是子目录的本地日志文件。

我搜索了Log::Log4perl的文档(在那里找不到‘终止’)、FAQ和网络,但是找不到--如何终止记录器,这样我就可以切换到另一个子目录,并在那里重新启动日志到另一个文件。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-01-15 20:01:01

如果(通过类别和级别)记录或不记录消息,则Log4perl中的记录器控制,而附加程序则控制记录消息的,因此在您的示例中,您希望使添加程序适应当前正在处理的子目录,而不是记录器。

通常,Log4perl在一开始就设置它的配置,然后继续不修改地执行配置,但是在用例中不能这样做,因为您不知道将要遇到的不同目录的数量(或者不想对它们进行硬编码),所以您需要在遍历目录时动态地调整您的Log4perl配置。

下面是一个概念的证明,使用add_appender()和remove_appender()为当前处理的目录配置相同的记录器:

代码语言:javascript
复制
use warnings;
use strict;
use Log::Log4perl qw(get_logger :levels);

my @dirs = qw( foo bar baz foo bar baz );

my $logger   = get_logger();
$logger->level( $INFO );

for my $dir ( @dirs ) {

    if( ! -d $dir ) {
        mkdir $dir or die "$dir: $!";
    }

    my $appender = Log::Log4perl::Appender->new(
        "Log::Log4perl::Appender::File",
        name     => "file-$dir",
        filename => "$dir/test.log",
        layout   => Log::Log4perl::Layout::SimpleLayout->new( ),
        mode     => "append",
    );

    $logger->add_appender( $appender );
    $logger->info( "hello there in $dir" );
    $logger->remove_appender( $appender->name( ) );
}

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41473639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档