2008-10-23 77 views
5

只是想知道有多少人登錄他們的應用程序?在應用程序中登錄多少,多少錢太多?

我已經看到了這一點:

「我通常喜歡用錯誤日誌 級別記錄是 由應用程序捕獲任何異常,我將使用 的INFO日誌級別爲」第一水平」 調試方案顯示,每當我 進入或退出的方法。從那裏我 使用DEBUG日誌級別跟蹤 詳細信息。致命的日誌 級別用於那些 我失敗中捕獲任何異常我基於網絡 應用程序「。

這與它的代碼示例:

Public Class LogSample 

    Private Shared ReadOnly Log As log4net.ILog = log4net.LogManager.GetLogger(GetType(LogSample)) 

    Public Function AddNumbers(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer 

     Dim intResults As Integer 

     Log.Info("Starting AddNumbers Method...") 
     Log.Debug("Number1 Specified: " & Number1) 
     Log.Debug("Number2 Specified: " & Number2) 

     intResults = Number1 + Number2 

     Try 

     intResults = Number1 + Number2 

     Catch ex As Exception 

     Log.Error("Error Adding Nubmers.", ex) 

     End Try 

     Log.Info("AddNumbers Method Complete.") 

     Return intResults 

    End Function 

End Class 

但這似乎只是這麼多添加到方法。例如,通常可能是7行代碼的類會突然變成12行代碼。該方法也失去了一些清晰和簡單。

但是在說,伐木的好處是很好的。在生產系統實例性能監視,追擊生產異常的bug(不是說你會這一切的日誌功能在所有的時間。

因此,我想知道是什麼人呢? 乾杯 安東尼

+0

http://stackoverflow.com/questions/163385/logging-約定 – 2008-10-23 23:51:38

回答

3

你說得對,這會讓代碼更難讀懂和維護。一個建議是考慮尋找AOP(面向方面​​編程)工具來將你的日誌邏輯和你的應用程序邏輯分離開來,Castle Windsor和Spring是兩個來的介意.Net社區,你可能想研究。

0

從安全s tandpoint日誌記錄可能是一個有趣的話題。在一段DDOS攻擊之後,我在CSO Online上寫了一個blog entry。這是我談的記錄部分,希望它有助於一點:

技術如日誌節流, 只寫日誌,並且使用的日誌服務器 可以增強系統的追溯 安全。在發生可能的 DDoS攻擊後,公司 無疑將要調查 攻擊。如果已使用正確的日誌記錄級別 ,則只有 可能的調查。太多,並且 日誌將很快填滿, 這可能是DoS 擺在首位的原因。太少和 日誌將是毫無價值的,因爲他們 不包含足夠的信息到 抓住罪犯。

3

這是更多的藝術方面的編程。

你不想記錄一切。但是你會想記錄系統中最關鍵的部分。

只要從廣義上考慮您的計劃,並嘗試確定哪些信息您將需要,以防萬一生產中斷。

首先,應用程序的所有核心邏輯模塊都應具有日誌記錄功能。裝飾部件例如UI /動畫不需要記錄。恕我直言,記錄每個方法的入口/出口都是過量的,並且還會產生噪聲,尤其是因爲您可以嵌入堆棧跟蹤。

而對於性能,請使用分析器

+0

日誌記錄是一個離線的分析器,你可能沒有其他的東西 – 2016-11-22 16:27:18

3

...嘿,我在SO問題中獲得被引用爲主題的徽章嗎? 8^D

但是,雖然我想澄清一下上面有關日誌記錄的一點,但是我對「詳細」日誌記錄的理由有一部分是基於我利用log4net本身功能的事實。

在我提供的示例中,該方法在WARN模式下每天登錄。這意味着唯一被默認記錄的東西是如果發生異常。如果我的某個客戶打電話給我的應用程序出現錯誤,他們不必在屏幕上看到我一些神祕的信息,就跳進日誌,看看發生了什麼。大多數情況下,答案就在那裏。

如果答案不可用,會發生什麼情況? Log4net允許我更新配置文件(不需要重新編譯,不需要通過系統管理員的批准訪問Web服務器上的某些特殊系統文件)並進入INFO模式。現在你開始看到第二層日誌記錄。也許代碼從來沒有把它變成一個特定的循環。也許數據檢索有一個空的記錄集。這第二級調試很有幫助,日誌只會稍微大一些。一旦完成,我可以再次更改配置並返回到日誌記錄。當然,如果事情真的很瘋狂,那麼我會進入完整的調試級別,我想知道每個變量正在報告什麼,我正在處理哪些DataRows以及應用程序中發生了什麼。在我目前的工作地點,我們沒有能力對我們的Web應用程序進行遠程調試,並且我們不能在沒有潛在增加數據的情況下總是進入生產數據庫,因此進行完全調試是次佳選擇。

我同意那裏的大多數人認爲,過多的日誌記錄可以真正降低應用程序的性能,導致更多的問題,而不是價值。如果不會在應用程序中推薦這種詳細的日誌記錄,除非應用程序出於安全原因保證它。但是,在需要時能夠利用詳細日誌記錄,而不必重新編譯我的代碼,如果您有一個可以輕鬆實現的框架(例如log4net),那麼我會說變得更好,詳細而且如果你不得不重新進入代碼本身,很容易在思想上濾除日誌代碼引用。

我很抱歉,如果我的聲音是防禦性或咆哮聲,我不是故意的。我只是想提供更多的背景知道如何以及爲什麼在上述方法中使用log4net設置我的日誌記錄。 8^D

+0

嘿,把它當作補充,我把你當作源代碼。不要把它當成一件壞事 – vdhant 2008-10-23 23:50:04

0

在最低限度內,您應該記錄錯誤並調用外部組件...您提供的示例是我要稱之爲的很多記錄......沒有任何記錄表明您處於一個方法的開始,或一個方法的結尾,甚至是傳遞給該方法的參數......它浪費了磁盤空間,你的日誌文件很快就會變得很大......

RWendi

0

這是不容易的決定是多少記錄不夠。在您的示例中,函數中的日誌代碼太多會掩蓋實際的邏輯代碼。日誌條目太多會導致日誌嘈雜。但是太少的日誌不是很有幫助!

對於.NET,您可以使用AOP庫PostSharp來幫助記錄函數的入口和出口以及參數值等等。

對於確定有多少記錄您的應用程序,看看這篇文章"System Logging and Log Analysis「由Marcus Ranum幫助。

希望這有助於。