应用程序日志架构

kse*_*een 4 .net c# asp.net-mvc nlog asp.net-mvc-3

我正在编写一个ASP .NET MVC3应用程序,并且由于应用程序应该是安全的,我需要一个良好的企业应用程序日志记录架构.

所以我在寻找现有的loggin框架并选择了NLog.所以在他们这一刻我不得不为日志制作数据库架构.

有没有人在这方面有很好的经验?它预计会记录一组操作,例如用户与系统对象的交互,后台工作,用户成员资格操作,支付交易等.

Rob*_*Rob 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>
Run Code Online (Sandbox Code Playgroud)

您可以使用规则部分将不同级别记录到不同的文件,请参阅下面的示例;

  <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>
Run Code Online (Sandbox Code Playgroud)

编辑:为记录信息添加了可能的表格布局.

Id | int
CreateDate | datetime
LogLevel | nvarchar
Message | nvarchar(max)
Exception | nvarchar(max)
StackTrace | nvarchar(max)
SourceUrl | nvarchar(255)
UserId | uniqueidentifier
OrderId | int
Run Code Online (Sandbox Code Playgroud)

上面的布局只是一个粗略的想法.这完全取决于您要在此表中登录的内容.虽然你必须尝试是否可以添加除NLog默认使用的参数之外的其他参数.


Pur*_*ome 7

就像Rob已回答..坚持使用NLog :)

如果您需要一个好的查看器,请不要忘记使用Sentinal作为免费的nLog查看器:)

不要忘记,您可以以编程方式打开日志记录部分,同时在生产中...查看网站的特定区域.然后使用Sentinal实时查看它们.

在此输入图像描述


另一个选择是采取像LoggR.net这样的东西.这实时地流式传输数据(即,在这种情况下的错误或记录信息).我认为它使用了令人敬畏的SignalR框架来使用WebSockets或Long Polling(2种实时技术):)

在此输入图像描述