如何用 ::FileRotate 替换 Log::Dispatch::File?

2024-02-12

我继承了一个正在使用的大型应用程序日志::调度::文件 https://metacpan.org/pod/Log::Dispatch::File。这设置了一个$log对象,你称之为$log->info('You are here')。在整个应用程序中有数千次对该对象的调用。

我们需要轮换日志文件,所以我开始尝试日志::调度::文件旋转 https://metacpan.org/pod/Log::Dispatch::FileRotate。尽管在其文档中被描述为“基本上是一个带有附加功能的 Log::Dispatch::File 包装器”,但 FileRotate 相反设置了一个$file对象,你可以通过调用来记录事情$file->log( level => 'info', message => 'You are here' );。这显然与我现有的应用程序不兼容。

有没有一些简单的方法可以从这里获取典型的 $log 对象,这样我就不必重写所有这数千个调用?


Log::Dispatch::File 未提供->info方法。您实际上正在创建并使用 Log::Dispatch 对象。是的,确实创建了 Log::Dispatch::File 对象,但您没有直接使用它。您正在使用 Log::Dispatch 对象,并且你应该继续这样做!

您可能正在使用类似以下内容的内容:

my $log = Log::Dispatch->new(
    outputs => [
        [ 'File', min_level => 'debug', filename => 'logfile' ],
    ],
);

如果是这样,请将其替换为以下内容:

my $log = Log::Dispatch->new(
    outputs => [
        [ 'FileRotate', min_level => 'debug', filename => 'logfile' ],
    ],
);

您想要传递给 L::D::FR 的任何其他参数 (size, max等)可以放入数组中。

您可能正在使用类似以下内容的内容:

my $log = Log::Dispatch->new();
$log->add(
    Log::Dispatch::File->new(
        name      => 'file1',
        min_level => 'debug',
        filename  => 'logfile'
    )
);

如果是这样,请将其替换为以下内容:

my $log = Log::Dispatch->new();
$log->add(
    Log::Dispatch::FileRotate->new(
        name      => 'file1',
        min_level => 'debug',
        filename  => 'logfile'
    )
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用 ::FileRotate 替换 Log::Dispatch::File? 的相关文章

随机推荐