博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 使用Nlog记录日志到数据库
阅读量:6637 次
发布时间:2019-06-25

本文共 3191 字,大约阅读时间需要 10 分钟。

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

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

可以在这里下载Nlog:

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

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

 

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

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

View Code
insert into MyLog ([CreateDate], [Origin], [LogLevel], [Message], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @stackTrace);

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

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

View Code

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

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

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

LigID    CreateDate    Origin    LogLevel    Message    Exception    StackTrace20    2012-10-18 15:49:16.4114    NlogSample.Program.Main    Fatal    发生致命错误    NULL    AppDomain.ExecuteAssembly => AppDomain._nExecuteAssembly => Program.Main 我们也可以将日志等级比较低的记录到文本,只将比较严重的日志记录到数据库中,相应的Nlog.config如下:
View Code
insert into MyLog ([CreateDate], [Origin], [LogLevel], [Message], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @stackTrace);

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

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

重新配置Nlog.Config如下:

View Code
insert into DevLog ([AppName],[ModuleName],[ProcName],[LogLevel],[LogTitle],[LogMessage],[LogDate],[StackTrace]) values (@appName, @moduleName, @procName, @logLevel, @logTitle, @logMessage,@logDate,@stackTrace);

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

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

View Code
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); }

转载于:https://www.cnblogs.com/itjeff/p/6379501.html

你可能感兴趣的文章
微信支付开发h5发起支付再次签名,返回给h5前端
查看>>
[Altera]PLL仿真
查看>>
PM2 指令简介
查看>>
【C语言学习趣事】_32_平胸的尴尬,嫁不出去的姑娘
查看>>
获取近30天的数据的时间方式
查看>>
Android AChartEngine 个性化设置
查看>>
Cool tool: Linux字符画figlet
查看>>
[转]windows下安装python MySQLdb及问题解决
查看>>
关于浏览器兼容问题:获取div的值
查看>>
2019-4-22 linux学习
查看>>
PKUWC2019游记
查看>>
控制转移指令分类与机器码
查看>>
BZOJ5279: [Usaco2018 Open]Disruption
查看>>
HDU 1312 Red and Black
查看>>
HDU 2871 Memory Control
查看>>
poj 1811 Prime Test
查看>>
ios 续费 问题 冰山一角
查看>>
一些奇怪的坑+好东西
查看>>
【Dairy】2016.10.24 - made 嘲讽垃圾
查看>>
查找表包含的页和页所在的表
查看>>