我想在幾個實用程序類別中採用日誌記錄, G。 DBI。 Log :: Log4perl的最佳做法是什麼?在實用程序類別中記錄
我認爲可以繼承DBI(比如說MyDBI
)並覆蓋那裏的一些方法來使它們執行日誌記錄。但是類別存在問題。如果創建
Log::Log4perl->get_logger(ref $self || $self)
一個記錄器,那麼所有的日誌條目屬於MyDBI
,這將是很難過濾。所以對我來說,傳遞一個記錄器到MyDBI
來自調用模塊(比如說,MyModule
)似乎更好,因此這個類別在語義上是正確的。第一個問題,一般情況下可以嗎?我的意思是,這種方法有沒有隱藏的礁石?
第二個問題,如何將記錄器傳遞給MyDBI
?我有一個想法來聲明一個全局變量,例如。 G。 $MyDBI::logger
並在撥號方式中設置:
local $MyDBI::logger = Log::Log4perl->get_logger(ref $self || $self);
傳統的全局變量不喜歡。你能想出更好的方法嗎?
編輯:當然,最好的代碼是沒有代碼。如果考慮到繼承,那麼caller
就足夠了。
第三個問題是否可以使用Log :: Log4perl登錄到兩個類別MyDBI
和MyModule
,如果它們在層次上不相關?
不好意思,我還沒有理解第一句話。 「呼叫者」,「獨立於log4perl運行你的模塊」是什麼意思?你能否讓它更明確? – codeholic 2010-03-09 17:31:24
例如在編寫測試類時,你可能會創建一些模塊,這些模塊不一定會實現log4perl--你可以簡單地跳過它,而如果你的界面是你的邏輯部分,你需要添加大量的邏輯。 – weismat 2010-03-09 18:58:31