我正在編寫一個ASP .NET MVC3應用程序,並且隨着應用程序預期會變得安全,我需要一個良好的企業應用程序日誌記錄體系結構。應用程序日誌記錄體系結構
所以我正在尋求現有的登錄框架,並選擇NLog。所以在他們的這一刻,我一直在爲日誌製作數據庫模式。
有沒有人在這方面有很好的經驗?預計會記錄一系列操作,例如用戶與系統對象的交互,後臺工作,用戶會員操作,支付交易等。
我正在編寫一個ASP .NET MVC3應用程序,並且隨着應用程序預期會變得安全,我需要一個良好的企業應用程序日誌記錄體系結構。應用程序日誌記錄體系結構
所以我正在尋求現有的登錄框架,並選擇NLog。所以在他們的這一刻,我一直在爲日誌製作數據庫模式。
有沒有人在這方面有很好的經驗?預計會記錄一系列操作,例如用戶與系統對象的交互,後臺工作,用戶會員操作,支付交易等。
我一直在使用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默認使用的參數以外的其他參數。
你的方法是像處理異常情況下(例如無法連接到數據庫的全部或類似的東西)。但是我能做些什麼,比如'user is successfully logged in'? – kseen
我會爲此使用信息級別。然後你可以做一些像_logger.info(「user:*** successfully logged in。」)。在配置中,您可以確定將信息記錄到數據庫或文件。就我個人而言,我總是假設一些工作,所以我從來沒有記錄過。我只記錄這種情況,例如發生錯誤或用戶嘗試使用錯誤的密碼進行登錄時。 – Rob
爲什麼你想記錄像'用戶已成功登錄'的信息? – Rob