我想让模块在运行时管理它们的日志记录,但不要让所有东西都引用一个单一的整体配置文件。当处理在不同权限下运行的进程时,我真的不想处理需要能够访问系统上每个日志的每个进程,而它们只写入其中的一个子集。
但是,我在 Log4perl 手册中没有找到太多关于如何在运行时从配置文件初始化附加附加程序的文档。http://metacpan.org/pod/Log::Log4perl::Appender引用了一个 add_appender 方法,但它适用于实例化的 appender 对象而不是 conf 文件。它也没有定义 logger 对象和 logger->appender 关系。
我尝试让每个包从它自己的 conf 中初始化,但这只会在每次初始化时破坏现有配置。我想做的是类似的事情:
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
如何解析配置并将其添加到当前配置中?
编辑:使用包变量的问题在于,这只是各种类使用的 Moose 角色,几乎只是 Ether 在使用 Log::Log4perl 制作自记录模块中的答案的 MooseX::Role::Parameterized 版本。因此,我的记录器正在组合到使用它的库中,并且我没有每次使用它时都可以处理的全局变量。
尽管..
如果我在 MooseX::Role::Parameterized 角色块之外声明一个全局变量,是否每个使用该角色的类都使用相同的 conf 变量?