我想在几个实用程序类中采用日志记录,例如 DBI。使用 Log::Log4perl 的最佳实践是什么?
我认为继承 DBI(比如,MyDBI
)并覆盖那里的一些方法以使它们进行日志记录是可以的。但是分类有问题。如果您创建一个记录器
Log::Log4perl->get_logger(ref $self || $self)
那么所有日志条目都属于MyDBI
并且很难过滤它们。MyDBI
所以对我来说,从调用模块(比如, )传递一个记录器似乎更好MyModule
,这样这个类别在语义上是正确的。第一个问题,一般可以吗?我的意思是,这种方法是否有任何隐藏的暗礁?
第二个问题,如何将记录器传递给MyDBI
?我有一个想法来声明一个全局变量,例如$MyDBI::logger
并在调用方法中设置:
local $MyDBI::logger = Log::Log4perl->get_logger(ref $self || $self);
传统上不喜欢全局变量。你能想出更好的方法吗?
编辑:当然,最好的代码是没有代码。caller
如果考虑到继承就足够了。
第三个问题,如果它们在层次上不相关,是否可以使用 Log::Log4perl 登录MyDBI
这两个类别?MyModule