2009-12-18 67 views
2

我們一直在使用log4net來記錄我們的asp.net web表單應用程序。我們的日誌記錄通常在我們的業務層,典型的實現是這樣的日誌改變實現?

SomeMethodCall(MethodParams) 
{ 
    Log.Start("Starting Some Method"); 
    try 
    { 
    //do something 
    } 
    catch(Exception ex) 
    { 
    Log.Exception("exception in SomeMethodCall" + ex.message); 
    } 

    Log.End("End SomeMethod"); 
} 

在我看來,它有點笨拙。有沒有一種更清潔的方式做不使用AOP?我不知道是否需要添加框架的開銷,只是用於日誌記錄,我想我知道它會給我很多其他選項(我做的不需要)

我想用一些AOP框架以更簡潔的方式來完成它,只需通過標記具有記錄和處理異常的屬性的方法即可。

我有兩件事與AOP有關(在我的初次閱讀之後)。一些框架將代碼注入到IL中(根據我的理解),並擔心它是否會誤導我。我可能會看到由我的AOP框架給出的第x行,因爲它實際上可能是我的應用程序中的第y行。我的恐懼沒有根據嗎?

性能:如果使用AOP框架,會增加多少性能開銷。

編輯:我也在調查PolicyInjectionApplicationBlock。不幸的是,我沒有改變implementaions的奢侈品我的業務邏輯

回答

2

你是說,大多數/所有的方法都採用這種結構?如果是這樣,我的建議是減少你的日誌記錄。 (我強調這是建議,也可能是有爭議的建議)。

實際上不需要用這種方法使用每一種方法的入口和出口的一攬子日誌,而是更有戰略地放置日誌條目。我喜歡確保所有的日誌消息都有一個「目的」 - 如果我無法想到日誌消息在調試時會以某種方式幫助或幫助我的場景,那麼它在我的代碼中就沒有業務了!

+0

不行,不是一切。只是重要的方法調用 – ram