原文:http://www.cnblogs.com/Gyoung/archive/2012/10/18/2729613.html

Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中。

可以在这里下载Nlog:http://nlog-project.org/

这里分享一下如何配置Nlog,可以使其日志记录到数据库中(这里我用的是SQL server 2008).

新建一个控件台项目:NlogSample,再通过NuGet加入Nlog程序集,如果没有装NuGet也可以在Nlog官网上下载,如图:

转:使用Nlog记录日志到数据库

安装好以后,在项目中就有了Nlog程序集和Nlog.config文件

打开Nlog.config文件,在target节点中,增加对数据库的配置。

转:使用Nlog记录日志到数据库
<target type="Database" name="database" connectionstring="Data Source=.;Initial Catalog=ReportServerTempDB;Integrated Security=True">
      <commandText>
        insert into MyLog ([CreateDate], [Origin], [LogLevel], [Message], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @stackTrace);
      </commandText>
      <parameter name="@createDate" layout="${longdate}"/>
      <!--日志发生时间-->
      <parameter name="@origin" layout="${callsite}"/>
      <!--日志来源-->
      <parameter name="@logLevel" layout="${level}"/>
      <!--日志等级-->
      <parameter name="@message" layout="${message}"/>
      <!--日志信息-->
      <parameter name="@stackTrace" layout="${stacktrace}"/>
      <!--堆栈信息-->
    </target>
转:使用Nlog记录日志到数据库

其中:connectionstring是数据库连接串,commandText是插入的SQL语句,parameter 是参数信息。当然在记录之前我们要先在数据库中建好相应的表。
在Nlog.config中的rule中增加日志记录规则

转:使用Nlog记录日志到数据库
<rules>
    <!-- add your logging rules here -->
    <logger name="*" writeTo="database"/>
    <!--
    <logger name="*" minlevel="Trace" writeTo="f" />
    -->
  </rules>
转:使用Nlog记录日志到数据库

这样,我们的Nlog.config就设置好了。在Main方法中写几句代码测试一下:

转:使用Nlog记录日志到数据库
 class Program
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();
        static void Main(string[] args)
        {
            logger.Fatal("发生致命错误");
        }
    }
转:使用Nlog记录日志到数据库

执行成功,数据库中已经增加一条日志记录了

LigID    CreateDate    Origin    LogLevel    Message    Exception    StackTrace
20    2012-10-18 15:49:16.4114    NlogSample.Program.Main    Fatal    发生致命错误    NULL    AppDomain.ExecuteAssembly => AppDomain._nExecuteAssembly => Program.Main

 我们也可以将日志等级比较低的记录到文本,只将比较严重的日志记录到数据库中,相应的Nlog.config如下:

转:使用Nlog记录日志到数据库
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwExceptions="true" internalLogFile="c:\nlog.txt" internalLogLevel="Debug">

  <!-- 
  See http://nlog-project.org/wiki/Configuration_file 
  for information on customizing logging rules and outputs.
   -->
  <!--<nlog throwExceptions="true" internalLogFile="c:\nlog.txt" internalLogLevel="Debug" />-->
  <targets>
    <!-- add your targets here -->
    <target name="file" xsi:type="File" fileName="${basedir}/logs/Log ${shortdate}.txt" layout="${longdate} ${callsite} ${level}: ${message} ${event-context:item=exception} ${stacktrace}" />
    <target type="Database" name="database" connectionstring="Data Source=.;Initial Catalog=ReportServerTempDB;Integrated Security=True">
      <commandText>
        insert into MyLog ([CreateDate], [Origin], [LogLevel], [Message], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @stackTrace);
      </commandText>
      <parameter name="@createDate" layout="${longdate}"/><!--日志发生时间-->
      <parameter name="@origin" layout="${callsite}"/><!--日志发生时间-->
      <parameter name="@logLevel" layout="${level}"/><!--日志等级-->
      <parameter name="@message" layout="${message}"/><!--日志信息-->
      <parameter name="@stackTrace" layout="${stacktrace}"/><!--日志发生时间-->
    </target>
    <!--
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    -->
  </targets>

  <rules>
    <!-- add your logging rules here -->
    <logger name="*"  writeTo="file"/>
    <logger name="*" minlevel="Error" appendTo="database"/>
    <!--
    <logger name="*" minlevel="Trace" writeTo="f" />
    -->
  </rules>
</nlog>
转:使用Nlog记录日志到数据库

相关文章:

  • 2022-12-23
  • 2021-11-13
  • 2021-11-11
  • 2022-12-23
  • 2021-06-07
  • 2022-01-17
  • 2021-08-07
猜你喜欢
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2022-02-28
相关资源
相似解决方案