Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Catalyst/Moose:使日志对象始终可用于模块外部_Perl_Moose_Catalyst - Fatal编程技术网

Perl Catalyst/Moose:使日志对象始终可用于模块外部

Perl Catalyst/Moose:使日志对象始终可用于模块外部,perl,moose,catalyst,Perl,Moose,Catalyst,我有一个大型Catalyst应用程序,它有自己的日志记录系统(除了内置Catalyst日志);设置例程将日志对象作为$c->stash->{log}在stash中可用。(不同的控制器有不同的日志对象,输出到不同的地方。) 这个应用程序有一个大的实用程序包,有几十个通常很小的功能来处理各种任务(比如get\u name\u from\u id或cleanse\u input或convert\u date)。此软件包仅用于此Catalyst应用程序,即任何外部应用程序都不共享此软件包 是否有一种方法

我有一个大型Catalyst应用程序,它有自己的日志记录系统(除了内置Catalyst日志);设置例程将日志对象作为
$c->stash->{log}
在stash中可用。(不同的控制器有不同的日志对象,输出到不同的地方。)

这个应用程序有一个大的实用程序包,有几十个通常很小的功能来处理各种任务(比如
get\u name\u from\u id
cleanse\u input
convert\u date
)。此软件包仅用于此Catalyst应用程序,即任何外部应用程序都不共享此软件包


是否有一种方法可以使日志对象对整个实用程序包可用,而不必每次手动传递它?我想驼鹿是有办法做到这一点的,但我的驼鹿服很差……

不要把它藏起来。拆分实用程序库。在需要共享功能的地方使用

package Loggable {
    use Moose::Role;
    sub log {
        ... # implementation goes here
    }
}

package SomeController {
    use Moose;
    with 'Loggable';

    ...
}

my $c = SomeController->new;
$c->can('log') # true

谢谢你能澄清一下实用程序库将如何使用它吗?(我猜同样的事情也适用于使Catalyst中的常规模型类可以使用日志类,这可能是一种更常见的需要。)@user1235777听起来其中一些不应该在实用程序包中,而是应该组合到Catalyst应用程序本身中,或者通过为log方法建议的daxim等角色来完成。您可以传递调用实用程序函数的对象(例如
clean\u input($self,$data)
$self->Utilities::clean\u input($data)
)。但我不太喜欢。这令人困惑。为什么每个控制器都有不同的日志配置?@simbabque首先,我不清楚如何使用实用程序包中的角色;这就是我想要的解释。其次,每个控制器负责应用程序的不同部分,因此每个控制器都需要登录到不同的文件。@user您根本不使用该实用程序中的角色。您可以在控制器中使用它。这将该行为组合到该控制器类中。然后它就可以登录了。日志记录实际上应该由控制器完成,而不是由实用工具完成。您使用的是类似于Log4perl的东西吗?Log::Dispatch。在任何情况下,控制器确实在做日志记录,虽然我同意角色可能是做日志记录的更好方式,但这不是真正的问题。。。。在大多数情况下,我们不需要从实用程序中登录,但有时我们希望这样做,特别是出于调试目的,并且最好只访问现有的日志对象,而不是手动将其添加到实用程序代码中。