我打算在我的模块中使用Log4Perl进行日志记录.
我的代码结构是这样的
我有Start.PL验证一些参数.我有几个相互链接的模块(PM)文件(用于这些PL和PM文件)
我有一个Logger.PM,其中我有一个创建日志对象的方法InitiateLogger()
$log = Log::Log4perl->get_logger("MyLog");
我调用这个方法Logger :: InitiateLogger();在Start.pl中
这是我的问题
>如何跨模块使用相同的$log(PM文件)
>我需要为此使用相同的包名吗?
如果有人向我澄清这些观点会很好.
解决方法
您可以使用我们将$log声明为包变量,并使用其详细的完全限定名称在任何需要的地方使用实例:
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中的logger对象的完全限定名称是$main :: log.您可以使用* log = $main :: log在需要记录器的每个包中创建别名.