我打算在我的模块中使用 Log4Perl 进行日志记录。
我的代码结构是这样的
我有 Start.PL 可以验证一些参数。我有几个相互关联的模块(PM)文件(在这些 PL 和 PM 文件中使用)
我有一个 Logger.PM,其中有一个创建日志对象的方法 InitiateLogger()
$log = Log::Log4perl->get_logger("MyLog");
我把这个方法称为
Logger::InitiateLogger();
在 Start.pl这是我的问题
如果有人澄清我这些观点会很好。
最佳答案
您可以声明$log
作为带有 our
的包变量并在您需要的任何地方使用该实例,使用其详细的完全限定名称:
Package::Name::$log->info( 'test' );
您可以在 typeglob 分配后使用别名来代替完全限定名称:
#!/usr/bin/env perl
package Package::Name;
use strict;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init( $ERROR );
our $log = get_logger();
package main;
use v5.12;
use strict;
*log = $Package::Name::log;
say $log;
产生:
Log::Log4perl::Logger=HASH(0x230ff20)
在您的情况下,Start.pl 中记录器对象的完全限定名称是
$main::log
.您可以使用
*log = $main::log
在每个需要记录器的包中创建一个别名。 .
关于perl - 如何在 Perl 中跨模块使用 Log4Perl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7568730/