perl - Catalyst/Moose:使日志对象始终对外部模块可用
问题描述
我有一个大型 Catalyst 应用程序,它有自己的日志系统(除了内置的 Catalyst 日志);设置例程使日志对象在存储中可用$c->stash->{log}
. (不同的控制器有不同的日志对象,输出到不同的地方。)
这个应用程序有一个大的实用程序包,有许多处理各种任务的一般小功能(沿着get_name_from_id
orcleanse_input
或convert_date
)。这个包专门用于这个 Catalyst 应用程序,即它不被任何外部应用程序共享。
有没有一种方法可以让整个 Utilities 包都可以使用日志对象,而不必每次都手动传递它?我认为有一些整洁的 Moose 方法可以做到这一点,但我的 Moose-fu 很差......
解决方案
不要把它放在藏匿处。拆分实用程序库。在需要共享功能的地方使用角色。
package Loggable {
use Moose::Role;
sub log {
... # implementation goes here
}
}
package SomeController {
use Moose;
with 'Loggable';
...
}
my $c = SomeController->new;
$c->can('log') # true
推荐阅读
- python - 为什么具有假定形状参数的子程序不能具有内部功能?
- flutter - 在提供程序中使用流与颤动
- minio - “mc cp --recursive”和“mc mirror --overwrite”有什么不同
- tensorflow - 大于 2GB 的张量流图
- angular - 离子保持登录
- html - HTML 到 PDF - 以英寸为单位的元素尺寸与预期不符
- javascript - 如何使用数据表计算两个时间之间的持续时间?
- python - 当它位于 /usr/local/bin/python3.6 时,如何在 ubuntu 上卸载 python3.6
- android - 如何使用从 url 下载的 apk 文件自动更新应用程序?
- javascript - 在 querySelectorAll() 之前调用 querySelector()