c# - 应用程序日志架构

标签 c# .net asp.net-mvc asp.net-mvc-3 nlog

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

所以我在寻找现有的登录框架并选择了 NLog .所以在他们那一刻,我坚持为日志制作数据库模式。

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

最佳答案

我已经使用 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 默认使用的参数以外的其他参数。

关于c# - 应用程序日志架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427618/

相关文章:

asp.net-mvc - 使用端口号的 ASP.NET Core 身份验证

c# - 如何使用 Qt Quick 显示富文本格式 (rtf)?

c# - 如果 WPF comboBox 中有相同的项目,则不会触发 SelectionChanged 事件

c# - 如何修复此 Base 64 数组问题

jquery - 如何使用 jquery 更新 MVC View 上的属性

.net - SQL Server Varbinary(最大): select a subset of bytes from the varbinary field

c# - 如何有效地删除空目录(和空子目录)

c# - 如何使用这个用户控件?

c# - 是否可以在 Windows 控制台应用程序中使用 savefiledialog()

.net - .net 4 和 EF 的 Sql 异常