大佬教程收集整理的这篇文章主要介绍了Log4perl:如何在运行时动态加载appender?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
但是,我没有在Log4perl手册中找到有关如何在运行时从配置文件初始化其他appender的文档. http://metacpan.org/pod/Log::Log4perl::Appender引用了一个add_appender方法,但它适用于实例化的appender对象而不是conf文件.它也没有定义记录器对象和logger-> appender关系.
我尝试从每个软件包初始化每个软件包,但这只是在每次初始化时都会破坏现有的配置.我想做的是:
@H_39_6@my $foo = Foo->new() ## checks Log::Log4perl::initialized(),sees that it ## hasn't been initalized yet,inits Log4perl from foo.conf my $bar = Bar->new() ## checks Log::Log4perl::initialized(),sees that it ## has been initalized. Adds appenders and loggers defined ## in bar.conf into the initialized configuration如何解析并将配置添加到当前配置中?
编辑:使用包变量的Probalem是这只是一个Moose角色被各种类消耗,几乎只是MouxX :: Role ::参数化版本的以太在Making self-logging modules with Log::Log4perl的答案.因此,我的记录器正在编写到库中消耗它,我没有一个全局变量,我每次使用它都可以工作.
虽然..
如果我在MooseX :: Role :: Parameterized角色块之外声明一个全局变量,那么每个使用该角色的类都会使用相同的conf变量吗?
我通常希望每个应用程序都有一个日志配置,因为它更容易维护和重新加载.
package Logger; use Moose::role; use Log::Log4perl; our %log_configs = (); around BUILDARGS => sub { my $orig = shift; my $class = shift; my $config_name = lc($class) . '.conf'; # if the config is not integrated yet if(! defined $log_configs{$config_namE}) { $log_configs{$config_namE} = 1; # reload all configs including new one my $config_text = ''; for my $file (sort keys %log_configs) { $config_text .= "\n" . do { local $/; # slurp unless(open my $fh,"<",$filE) { warn "$file could not be open\n"; ''; } else { <$fh> } }; } # refresh config Log::Log4perl::init(\$config_text); } return $class->$orig(@_); }; package Foo; use Moose; with 'Logger'; use Log::Log4perl ':easy'; sub BUILD { ERROR 'Foo reporTing'; } package Bar; use Moose; with 'Logger'; use Log::Log4perl ':easy'; sub BUILD { INFO 'Bar reporTing'; } package main; my $foo = Foo->new; my $bar = Bar->new;
以上是大佬教程为你收集整理的Log4perl:如何在运行时动态加载appender?全部内容,希望文章能够帮你解决Log4perl:如何在运行时动态加载appender?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。