使用Nlog记录日志到数据库

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

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

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

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

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

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

<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>

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

<rules>
    <!-- add your logging rules here -->
    <logger name="*" writeTo="database"/>
    <!--
    <logger name="*" minlevel="Trace" writeTo="f" />
    -->
  </rules>

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

 class Program
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();
        static void Main(string[] args)
        {
            logger.Fatal("发生致命错误");
        }
    }

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

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如下:

<?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>

在根结点上设置:throwExceptions="true" internalLogFile="c:\nlog.txt" internalLogLevel="Debug" ,可以让我们看到Nlog的内部错误,对调试有很大的帮助。

这里也许有人要问,上面日志表中的参数${longdate},${level} 等都是Nlog内部恰好有提供的,要是我要记录的信息Nlog没有怎么办?没问题,我们完全可以自己定义日志

表的数据结构。

重新配置Nlog.Config如下:

<?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:\nlog1.txt" internalLogLevel="Debug">

  <!--
  See http://nlog-project.org/wiki/Configuration_file
  for information on customizing logging rules and outputs.
   -->
  <targets>
    <!-- add your targets here -->
    <target name="file" xsi:type="File" fileName="D:\ProcLogs/${event-context:item=appName}/${event-context:item=moduleName}/${event-context:item=procName}/${event-context:item=logTitle}/${shortdate}-${level}.txt"
            layout="${longdate} ${level}:${event-context:item=logMessage}" />
    <target name="fi" xsi:type="File" fileName="${basedir}/logs/Log ${shortdate}.txt"
           layout="${longdate} ${level}:${message} ${stacktrace}" />
    <target type="Database" name="database" connectionstring="Data Source=.;Initial Catalog=ReportServerTempDB;Integrated Security=True">
      <commandText>
        insert into DevLog ([AppName],[ModuleName],[ProcName],[LogLevel],[LogTitle],[LogMessage],[LogDate],[StackTrace]) values (@appName, @moduleName, @procName, @logLevel, @logTitle, @logMessage,@logDate,@stackTrace);
      </commandText>
      <parameter name="@appName" layout="${event-context:item=appName}"/>
      <parameter name="@moduleName" layout="${event-context:item=moduleName}"/>
      <parameter name="@procName" layout="${event-context:item=procName}"/>
      <parameter name="@logLevel" layout="${event-context:item=logLevel}"/>
      <parameter name="@logTitle" layout="${event-context:item=logTitle}"/>
      <parameter name="@logMessage" layout="${event-context:item=logMessage}"/>
      <parameter name="@logDate" layout="${longdate}"/>
      <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="Log"  writeTo="file"/>
    <logger name="L"  writeTo="fi"/>
    <!--<logger name="Log" minlevel="Info" appendTo="database"/>-->
    <!--
    <logger name="*" minlevel="Trace" writeTo="f" />
    -->
  </rules>
</nlog>

类似<parameter name="@appName" layout="${event-context:item=appName}"/> ,我们就可以定义自己的参数。

然后在写日志的时候,可以通过LogEventInfo 类给我们的参数赋值,代码如下:

 void WriteLog(LogLevel levle, string appName, string moduleName, string procName, string logLevel, string logTitle, string logMessage)
        {
            LogEventInfo ei = new LogEventInfo(levle, "", "");
            ei.Properties["appName"] = appName;
            ei.Properties["moduleName"] = moduleName;
            ei.Properties["procName"] = procName;
            ei.Properties["logLevel"] = logLevel.ToUpper();
            ei.Properties["logTitle"] = logTitle;
            ei.Properties["logMessage"] = logMessage;
            logger.Log(ei);
        }

示例项目下载:点我

注意,设置数据库时,时间要为字符串类型。

时间: 2024-11-03 16:10:01

使用Nlog记录日志到数据库的相关文章

.Net Core 使用NLog记录日志到文件和数据库

NLog 记录日志是微软官方推荐使用. 接下来,通过配置日志记录到文件和Sql Server数据库. 第一步:首先添加包NLog.Config (可通过微软添加包命令Install-Package 包名进行添加,也可以通过管理NuGet程序包进行添加),添加成功后会生成NLog.config配置文件.并对该配置文件进行配置.详细配置可参考Git上 NLog说明. 一下是我个人配置. 1 <?xml version="1.0" encoding="utf-8"

Asp.Net Core中使用NLog记录日志

2019/10/28, Asp.Net Core 3.0, NLog 4.6.7, NLog.Web.AspNetCore 4.9.0 摘要:NLog在asp.net网站中的使用,NLog日志写入数据库,NLog日志写入文件 需求 1.日志自动写入到数据库.写入到文件 2.appsettings.json数据库连接更改后,不需要去改NLog中的连接地址,启动网站或项目时自动检测变动然后去更改,以appsettings.json为准,保持同步. 3.写入日志时,除了NLog自带的字段,新增LogT

Nlog 记录日志到 sqlite

最近研究了一下Nlog这个日志框架,这里记录一下如何将日志写到sqlite中. 第一步:使用NuGet获取Nlog和Sqlite 第二步:在sqlite中创建一个database,这里我用了SQLite Expert Personal可视化工具 第三步:在Nlog.config中配置target节点,这个在Nlog的官网中没有查找到相应的例子,但网上有一篇博客有相应的记载,所以就先参考下: <target name="Database" xsi:type="Databa

ASP.NET Core使用NLog记录日志到Microsoft Sql Server

在之前的文章中介绍了如何在ASP.NET Core使用NLog,本文为您介绍在ASP.NET Core使用NLog记录到Microsoft Sql Server 1.我们需要添加依赖: NLog.Web.AspNetCore System.Data.SqlClient 2.添加nlog.config文件 1 <?xml version="1.0" encoding="utf-8" ?> 2 <nlog xmlns="http://www.

C# 使用NLog记录日志

NLog是一个记录日志组件,和log4net一样被广泛使用,它可以将日志保存到文本文件.CSV.控制台.VS调试窗口.数据库等.最近刚用到这个组件,觉得不错,水一篇. 下载 通过Nuget安装NLog,你也可以同时安装NLog.Config,它会在项目目录下帮你建立一个配置文件NLog.config,不过不需要,我们直接手动建立一个,你也可以将配置的信息写入到 App.config/Web.config,我比较喜欢独立出来,不与其它配置掺和在一起. 配置 在项目根目录下新建一个NLog.conf

转:C# 使用NLog记录日志

原文:http://www.cnblogs.com/felixnet/p/5498759.html NLog是一个记录日志组件,和log4net一样被广泛使用,它可以将日志保存到文本文件.CSV.控制台.VS调试窗口.数据库等.最近刚用到这个组件,觉得不错,水一篇. 下载 通过Nuget安装NLog,你也可以同时安装NLog.Config,它会在 项目目录下帮你建立一个配置文件NLog.config,不过不需要,我们直接手动建立一个,你也可以将配置的信息写入到 App.config/Web.co

Log4Net(三)之记录日志到数据库

前面两篇短文向大家介绍了如何使用log4net,以及如何将log4net记录到文本文件中.下面本文将向大家介绍如何将log4net记录到数据库中. 经过前面的介绍,我想大家对使用log4net的过程已经很熟悉了,下面直接贴上log4net存日志到数据库的配置内容: 将前面log4net.config文件的root节点和appender节点替换为下面的内容, <root> <level value="ALL"/> <appender-ref ref=&quo

使用log4net记录日志到数据库(含有自定义属性)

记录日志是管理系统中对用户行为的一种监控与审核,asp.net中记录日志的方式有很多种,这里我只介绍一下最近用到的log4net,关于他的具体介绍网上有很多,我讲一下他的用法. 第一步:在配置文件中的<configSections>节添加下面一句话 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 第二步:在&

.net core nlog记录日志

1.通过nuget 查找 下载 NLog.Extensions.Logging 2.配置nlog.config文件 1 <?xml version="1.0" encoding="utf-8" ?> 2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst