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