C# 使用Nlog记录日志到数据库 使用LogEventInfo类获取,命名空间名称、类名、方法名

时间:2023-02-06 08:39:15

原文地址:http://dotnet.9sssd.com/csbase/art/793

[摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中。本文为你介绍C# 使用Nlog记录日志到数据库。

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

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

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

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

C# 使用Nlog记录日志到数据库   使用LogEventInfo类获取,命名空间名称、类名、方法名

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

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

1 <target type="Database" name="database" connectionstring="Data Source=.;Initial Catalog=ReportServerTempDB;Integrated Security=True">
2 <commandText>
3 insert into MyLog ([CreateDate], [Origin], [LogLevel], [Message], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @stackTrace);
4 </commandText>
5 <parameter name="@createDate" layout="${longdate}"/>
6 <!--日志发生时间-->
7 <parameter name="@origin" layout="${callsite}"/>
8 <!--日志来源-->
9 <parameter name="@logLevel" layout="${level}"/>
10 <!--日志等级-->
11 <parameter name="@message" layout="${message}"/>
12 <!--日志信息-->
13 <parameter name="@stackTrace" layout="${stacktrace}"/>
14 <!--堆栈信息-->
15 </target>

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

在Nlog.config中的rule中增加日志记录规则:

1 <rules>
2 <!-- add your logging rules here -->
3 <logger name="*" writeTo="database"/>
4 <!--
5 <logger name="*" minlevel="Trace" writeTo="f" />
6 -->
7 </rules>

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

1 class Program
2 {
3 private static Logger logger = LogManager.GetCurrentClassLogger();
4 static void Main(string[] args)
5 {
6 logger.Fatal("发生致命错误");
7 }
8 }

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

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

我们也可以将日志等级比较低的记录到文本,只将比较严重的日志记录到数据库中,相应的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-instance"
4 throwExceptions="true" internalLogFile="c:\nlog.txt" internalLogLevel="Debug">
5  
6 <!--
7 See http://nlog-project.org/wiki/Configuration_file
8 for information on customizing logging rules and outputs.
9 -->
10 <!--<nlog throwExceptions="true" internalLogFile="c:\nlog.txt" internalLogLevel="Debug" />-->
11 <targets>
12 <!-- add your targets here -->
13 <target name="file" xsi:type="File" fileName="${basedir}/logs/Log ${shortdate}.txt" layout="${longdate} ${callsite} ${level}: ${message} ${event-context:item=exception} ${stacktrace}" />
14 <target type="Database" name="database" connectionstring="Data Source=.;Initial Catalog=ReportServerTempDB;Integrated Security=True">
15 <commandText>
16 insert into MyLog ([CreateDate], [Origin], [LogLevel], [Message], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @stackTrace);
17 </commandText>
18 <parameter name="@createDate" layout="${longdate}"/><!--日志发生时间-->
19 <parameter name="@origin" layout="${callsite}"/><!--日志发生时间-->
20 <parameter name="@logLevel" layout="${level}"/><!--日志等级-->
21 <parameter name="@message" layout="${message}"/><!--日志信息-->
22 <parameter name="@stackTrace" layout="${stacktrace}"/><!--日志发生时间-->
23 </target>
24 <!--
25 <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
26 layout="${longdate} ${uppercase:${level}} ${message}" />
27 -->
28 </targets>
29  
30 <rules>
31 <!-- add your logging rules here -->
32 <logger name="*" writeTo="file"/>
33 <logger name="*" minlevel="Error" appendTo="database"/>
34 <!--
35 <logger name="*" minlevel="Trace" writeTo="f" />
36 -->
37 </rules>
38 </nlog>

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

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

重新配置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-instance"
4 throwExceptions="true" internalLogFile="c:\nlog1.txt" internalLogLevel="Debug">
5  
6 <!--
7 See http://nlog-project.org/wiki/Configuration_file
8 for information on customizing logging rules and outputs.
9 -->
10 <targets>
11 <!-- add your targets here -->
12 <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"
13 layout="${longdate} ${level}:${event-context:item=logMessage}" />
14 <target name="fi" xsi:type="File" fileName="${basedir}/logs/Log ${shortdate}.txt"
15 layout="${longdate} ${level}:${message} ${stacktrace}" />
16 <target type="Database" name="database" connectionstring="Data Source=.;Initial Catalog=ReportServerTempDB;Integrated Security=True">
17 <commandText>
18 insert into DevLog ([AppName],[ModuleName],[ProcName],[LogLevel],[LogTitle],[LogMessage],[LogDate],[StackTrace]) values (@appName, @moduleName, @procName, @logLevel, @logTitle, @logMessage,@logDate,@stackTrace);
19 </commandText>
20 <parameter name="@appName" layout="${event-context:item=appName}"/>
21 <parameter name="@moduleName" layout="${event-context:item=moduleName}"/>
22 <parameter name="@procName" layout="${event-context:item=procName}"/>
23 <parameter name="@logLevel" layout="${event-context:item=logLevel}"/>
24 <parameter name="@logTitle" layout="${event-context:item=logTitle}"/>
25 <parameter name="@logMessage" layout="${event-context:item=logMessage}"/>
26 <parameter name="@logDate" layout="${longdate}"/>
27 <parameter name="@stackTrace" layout="${stacktrace}"/>
28 </target>
29 <!--
30 <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
31 layout="${longdate} ${uppercase:${level}} ${message}" />
32 -->
33 </targets>
34  
35 <rules>
36 <!-- add your logging rules here -->
37 <logger name="Log" writeTo="file"/>
38 <logger name="L" writeTo="fi"/>
39 <!--<logger name="Log" minlevel="Info" appendTo="database"/>-->
40 <!--
41 <logger name="*" minlevel="Trace" writeTo="f" />
42 -->
43 </rules>
44 </nlog>

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

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

1 void WriteLog(LogLevel levle, string appName, string moduleName, string procName, string logLevel, string logTitle, string logMessage)
2 {
3 LogEventInfo ei = new LogEventInfo(levle, "", "");
4 ei.Properties["appName"] = appName;
5 ei.Properties["moduleName"] = moduleName;
6 ei.Properties["procName"] = procName;
7 ei.Properties["logLevel"] = logLevel.ToUpper();
8 ei.Properties["logTitle"] = logTitle;
9 ei.Properties["logMessage"] = logMessage;
10 logger.Log(ei);
11 }

C# 使用Nlog记录日志到数据库 使用LogEventInfo类获取,命名空间名称、类名、方法名的更多相关文章

  1. &lbrack;转&rsqb;C&num; 使用Nlog记录日志到数据库

    本文转自:http://www.cnblogs.com/weixing/archive/2013/04/26/3044422.html 摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输 ...

  2. C&num; 使用Nlog记录日志到数据库

    [摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中.本文为你介绍C# 使用Nlog记录日志到数据库. Nlog是一个很不错的.NET ...

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

    原文:http://www.cnblogs.com/Gyoung/archive/2012/10/18/2729613.html Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台, ...

  4. 使用Nlog记录日志到数据库

    Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中. 可以在这里下载Nlog:http://nlog-project.org/ 这里分享一下 ...

  5. 从零开始搭建前后端分离的NetCore2&period;2(EF Core CodeFirst&plus;Autofac)&plus;Vue的项目框架之四Nlog记录日志至数据库

    为什么要进行日志记录呢?为什么要存至数据库呢?只能说日志记录是每个系统都应当有的. 好的日志记录方式可以提供我们足够多定位问题的依据.查找系统或软件或项目的错误或异常记录.程序在运行时就像一个机器人, ...

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

    NLog 记录日志是微软官方推荐使用. 接下来,通过配置日志记录到文件和Sql Server数据库. 第一步:首先添加包NLog.Config (可通过微软添加包命令Install-Package 包 ...

  7. Asp&period;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日志写入数据 ...

  8. EF&plus;LINQ事物处理 C&num; 使用NLog记录日志入门操作 ASP&period;NET MVC多语言 仿微软网站效果&lpar;转&rpar; 详解C&num;特性和反射(一) c&num; API接受图片文件以Base64格式上传图片 &period;NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  9. &period;NET中使用NLog记录日志

    以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂.下面小编就和大伙分享一下NLog的使用方式. 引用NLog.Config 在使用NLog之前,我们要首先添加对NLog.Co ...

随机推荐

  1. Java 生成压缩包,ZipOutputStream的使用

    案例:根据url 获取网络资源A,B,C   将资源A,B,C放在一起生成一个xxx.zip 直接看代码 import java.io.File; import java.io.FileOutputS ...

  2. OpenJudge计算概论-寻找下标

    /*======================================================================== 寻找下标 总时间限制: 1000ms 内存限制: ...

  3. WPF xmal绑定数据,当显示数据过长用省略号代替的方法

    有时候会遇到这种情况,用了数据绑定显示的数据太长时,如何让过长的数据显示规定的长度,多余的用省略号代替呢,自己写了个简单的小例子和大家分享一下^_^,我也是学习WPF不久,这是我第一次写博客,有问题还 ...

  4. rsync相关整理

    第一部分 rsync服务端配置 1.下载安装 a. yum安装.  yum install rsync    b. 下载rsync安装文件安装        #tar zxvf rsync-2.6.9 ...

  5. &commat;JsonIgnoreProperties注解不起作用的问题解决

    最近做的一个东西要调第三方服务接口,要参照接口文档开发,但是第三方服务的接口字段名全部都是大写,本来以为这种应该没有什么问题.但是实际开发中发现大写的字段名字去调后台接口的时候报: org.codeh ...

  6. Tomcat不停机部署项目

  7. python3&period;6配置libsvm2&period;2

    参考自:https://blog.csdn.net/weixin_35884839/article/details/79398085 由于需要使用到libsvm,所以开始配这个,所幸一次性就成功了. ...

  8. spring boot打包后windows启动乱码

    事情的起因什么的就不多表了,直接进入主题... 项目都要上线了,结果发现使用 idea mvn install之后的 jar在windows下启动乱码,而使用idea启动却没有问题!!! 这是神马情况 ...

  9. te

    var option = {}; $(function() { /* var taskId = ${pd.taskId}; */ var taskId = "1470880530369&qu ...

  10. xutil3 post 和 get请求

    https://i.cnblogs.com/EditPosts.aspx?postid=7001253 compile 'org.xutils:xutils:3.3.36' 注册xutil3 < ...