2011-12-08 64 views
4

我正在編寫一個ASP .NET MVC3應用程序,並且隨着應用程序預期會變得安全,我需要一個良好的企業應用程序日誌記錄體系結構。應用程序日誌記錄體系結構

所以我正在尋求現有的登錄框架,並選擇NLog。所以在他們的這一刻,我一直在爲日誌製作數據庫模式。

有沒有人在這方面有很好的經驗?預計會記錄一系列操作,例如用戶與系統對象的交互,後臺工作,用戶會員操作,支付交易等。

回答

9

我一直在使用NLog,現在我很滿意。我最喜歡NLog的是,您可以配置不同的日誌級別以寫入不同的文件和/或數據庫。這是一個非常強大的日誌庫。

對於登錄到數據庫,您可以在配置中使用類似下面的內容。這與我在我工作的公司使用的類似。

<target xsi:type="Database" 
     name="TestDatabaseLogging" 
     connectionString="Data Source=127.0.0.1;Initial Catalog=NLog_Test;User ID=MyLogin;Password=MyPassword" 
     dbDatabase="NLog_Test"> 
    <commandText> 
    insert into INNO_LOG ([createDate], [Origin], [LogLevel], [Message], [Exception], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @exception, @stackTrace) 
    </commandText> 
    <parameter name="@createDate" layout="${date}"/> 
    <parameter name="@origin" layout="${callsite}"/> 
    <parameter name="@logLevel" layout="${level}"/> 
    <parameter name="@message" layout="${message}"/> 
    <parameter name="@exception" layout="${exception:format=Message,StackTrace}"/> 
    <parameter name="@stackTrace" layout="${stacktrace}"/> 
</target> 

您可以使用規則部分登錄不同層次的不同的文件,見下面的例子;

<rules> 
    <logger name="*" minlevel="Fatal" writeTo="mail" /> 
    <logger name="*" minlevel="Error" writeTo="TestDatabaseLogging" /> 
    <logger name="*" minlevel="Debug" writeTo="file-debug" /> 
    <logger name="*" minlevel="Info" writeTo="file" /> 
    <!--Log to specific files for specific classes.--> 
    <logger name="_Default" minlevel="Trace" writeTo="file-default" /> 
    <logger name="TestClass" minlevel="Trace" writeTo="file-testclass" /> 
    </rules> 

編輯:爲記錄信息添加了可能的表佈局。

Id | int 
CreateDate | datetime 
LogLevel | nvarchar 
Message | nvarchar(max) 
Exception | nvarchar(max) 
StackTrace | nvarchar(max) 
SourceUrl | nvarchar(255) 
UserId | uniqueidentifier 
OrderId | int 

上面的佈局只是一個大概的想法。這完全取決於你想要登錄這個表格。儘管您必須嘗試是否可以添加除NLog默認使用的參數以外的其他參數。

+0

你的方法是像處理異常情況下(例如無法連接到數據庫的全部或類似的東西)。但是我能做些什麼,比如'user is successfully logged in'? – kseen

+0

我會爲此使用信息級別。然後你可以做一些像_logger.info(「user:*** successfully logged in。」)。在配置中,您可以確定將信息記錄到數據庫或文件。就我個人而言,我總是假設一些工作,所以我從來沒有記錄過。我只記錄這種情況,例如發生錯誤或用戶嘗試使用錯誤的密碼進行登錄時。 – Rob

+0

爲什麼你想記錄像'用戶已成功登錄'的信息? – Rob

7

像羅布回答..堅持NLOG :)

如果你需要一個好的觀衆,不要忘記用Sentinal作爲一個自由n日誌查看器:)

不要忘了,你可以編程方式打開日誌部分,而在生產..查看網站的特定區域。然後使用Sentinal實時查看它們。

enter image description here


另一種選擇是採取advanctage的類似LoggR.net。這實時流式傳輸數據(即在這種情況下的錯誤或記錄信息)。我認爲這是使用真棒SignalR框架使用WebSockets或長輪詢(2實時技術):)

enter image description here

+0

+1 Sentinal和Loggr – Rob

+0

+1 ya - 這裏的相同示例 –