gpt4 book ai didi

perl - 如何在 Perl 中跨模块使用 Log4Perl?

转载 作者:行者123 更新时间:2023-12-04 23:29:15 25 4
gpt4 key购买 nike

我打算在我的模块中使用 Log4Perl 进行日志记录。

我的代码结构是这样的

我有 Start.PL 可以验证一些参数。我有几个相互关联的模块(PM)文件(在这些 PL 和 PM 文件中使用)

我有一个 Logger.PM,其中有一个创建日志对象的方法 InitiateLogger()

 $log    = Log::Log4perl->get_logger("MyLog");

我把这个方法称为 Logger::InitiateLogger();在 Start.pl

这是我的问题
  • 如何跨模块使用相同的 $log(PM 文件)
  • 我需要为此使用相同的包名吗?

  • 如果有人澄清我这些观点会很好。

    最佳答案

    您可以声明$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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com