2011-06-10 54 views
1

我只想知道什麼是最佳實踐/廣泛使用,我目前在域服務層做日誌記錄,但是在我的Web應用程序層內發生的任何事情都沒有記錄。在Web應用程序或域層中的Asp.net mvc應用程序中記錄錯誤?

我想一個集中和簡單的位置,以盡我創建/刪除/更新loggging ...

我聽說ELMAH的,不知道它是多麼有用的唯一域服務層記錄...

我目前沒有使用任何框架進行日誌記錄,我只是將字符串生成器的日誌消息或獲取異常並將其刷新到數據庫中......這是最好的方式去解決它嗎?

如果它的事項......我需要使用Ninject我ILoggingService注入

注意:我說的不是記錄用戶活動......將definetly我的域名服務層內只存在...

回答

2

Haroon,

利用Ninject創建和管理ILoggingService的生命週期。該服務的實現應該直接建立在測試良好的日誌庫(如NLog或log4net)之上。

一旦你有一個服務的實例,你可以很容易地將它注入到你的MVC控制器或你的領域層。所有日誌記錄應該針對該實例發生,而不是靜態日誌記錄類。

這將允許你有你想要的統一日誌記錄,並且有一個清晰的關注點。

+0

你覺得這是更好地記錄我的asp.net MVC應用程序或服務領域裏面? – Haroon 2011-06-10 11:58:35

+0

imho不同層次記錄不同的東西。 MVC(用戶層)可能記錄所有用戶交互,而域層登錄邏輯錯誤等。 – jgauffin 2011-06-10 12:22:35

0

imho記錄不應該被注入。原因是你的大部分服務(如果不是全部的話)將使用日誌記錄。

如果你看看大多數日誌框架(如nlog),他們正在使用singleton/facade和抽象工廠來提供日誌記錄。

喜歡的東西:

public static class LogFactory 
{ 
    private static ILogFactory _instance; 

    public void Assign(ILoggingFactory factory) 
    { 
     _instance = factory; 
    } 

    public ILogger CreateFor<T>() 
    { 
     return _instance.CreateFor<T>(); 
    } 
} 

設計,使您的服務只依賴一個類和一個接口。因此,切換日誌實現仍然非常容易。

在你的類使用像代碼:

public class ServiceImp : IService 
{ 
     private ILogger _logger = LogFactory.CreateFor<IService>(); 

     public void SomeMethod() 
     { 
      _logger.Warning("Something went wrong, but we can handle it. Hence only a warning"); 
     } 
} 
+0

如果我是/不是將我的日誌記錄實例注入到我的應用程序中=>我個人認爲使用基類會更好,它包含對我所有服務的日誌記錄的引用,您是否也有同感? – Haroon 2011-06-10 11:57:53

+0

不,我不會創建一個基類,只是爲了增加對日誌記錄的支持(我強烈建議不要使用瑞士軍刀基類,它們會破壞很多設計原則)。如果你已經有一個基類,那麼向它添加一個記錄器屬性就可以了。 – jgauffin 2011-06-10 12:20:14

相關問題