应用程序日志架构

4
我正在编写一个ASP .NET MVC3应用程序,由于需要保证应用程序的安全性,因此需要一个良好的企业级应用程序日志记录架构。因此,我正在查看现有的日志记录框架,并选择了NLog。目前,我遇到了制作日志数据库架构的困难。有没有人在这方面有很好的经验?预计记录一系列操作,如用户与系统对象的交互、后台工作、用户成员资格操作、付款交易等。
2个回答

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默认使用的参数之外的其他附加参数。


你的方式类似于处理异常情况(例如完全无法连接到数据库或类似情况)。但是对于“用户成功登录”这样的情况,我该怎么办? - kseen
我会使用信息级别来记录。您可以像这样执行_logger.info("user: *** successfully logged in.")。在配置中,您可以确定将信息记录到数据库或文件中。个人而言,我总是假设一切正常,所以我从不记录那些情况。我只记录异常情况,例如发生错误或用户尝试过多次使用错误的密码登录。 - Rob
为什么要记录像“用户成功登录”这样的信息? - Rob
如果你问我,知道用户登录并不能了解他们的行为。为什么不使用Google Analytics来跟踪呢?如果不可能的话,我会将其记录在单独的表格中,以便稍后可以从这些操作中获取概述。 - Rob
1
NLog是正确的选择。我们将其与Splunk结合使用,以实现相当强大的信息检索。 - Sean H
显示剩余4条评论

7

像Rob所回答的那样,坚持使用NLog :)

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

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

enter image description here


另一种选择是利用类似于LoggR.net的东西。这将实时流式传输数据(例如错误或日志信息)。我认为它正在使用令人惊叹的SignalR框架来使用WebSockets或Long Polling(两种实时技术):)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接