2012-03-08 80 views
3

我用我在應用程序中調用的靜態方法創建了一個簡單的類LogHelper。我可以這樣稱呼它:跨類的PHP日誌記錄方法

LogHelper::writeToErrorLog($config->getLogPath(), $exception); or 
LogHelper::writeToErrorLog($config->getLogPath(), $exception, $config->getLogFile); 

如果沒有傳入日誌文件名,writeToErroLog方法將生成日誌文件名。

我有另一個名爲Config的類,它基本上接受一個XML文件並通過getters & setter公開這些值。這是在應用程序開始時初始化的。&包含錯誤日誌需要寫入的日誌路徑。

我的要求是我創建一個日誌文件,每個應用程序的運行具有相同的文件名。當應用程序結束日誌,如果填充,將通過電子郵件發送。

我的應用程序有許多其他的類,用於數據庫,解析數據,格式化數據等等,所有這些都需要記錄在某個點上。我的大部分錯誤將來自拋出的異常,這會引發父級,抓到由LogHelper處理的&。有幾種情況我不想拋出異常,只想記錄信息或錯誤。

我擔心的是我總是把配置傳遞給需要日誌記錄的每個類,這感覺不對。另外我只想設置一次錯誤日誌的文件名。有沒有最佳實踐方法來解決這個問題?

TIA

東西

+0

'我爲應用程序的每次運行創建一個具有相同文件名的日誌文件 - 你最近怎麼做?使用一個隨機數還是什麼?如果這對你的問題很重要,你應該添加代碼。 – hakre 2012-03-08 23:05:20

+0

我已經改變了這種情況,稍微有時間思考一下。當我第一次初始化我的應用程序時,我正在設置日誌文件名並將其保存回配置對象,因爲無論如何,配置對象都會傳遞到任何地方。然後當我調用LogHelper時,我從配置對象中取出日誌文件。 – StuffandBlah 2012-03-09 10:11:17

+0

我想我的問題應該更專注於OOP,例如當對象依賴於另一個對象並始終需要可用時,最佳方法是什麼?我想一個選項可能是將配置對象添加到會話? – StuffandBlah 2012-03-09 10:26:33

回答

1

你有沒有考慮過使用set_exception_handler()?您不必將記錄器放在每個類中,它只會處理所有未捕獲的異常。你可以在你的引導過程或其他應用程序預置點中調用它是這樣:

set_exception_handler(array("MyClassName", "functionNameHere")); 

內部的功能,你可以調用LogHelper::writeToErrorLog()