nlog输出mysql_使用Nlog记录日志到数据库

本文介绍了如何配置Nlog将日志输出到SQL Server数据库,包括创建数据库表、配置Nlog.config文件、设置日志记录规则,并展示了如何自定义日志参数和通过LogEventInfo赋值。
摘要由CSDN通过智能技术生成

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

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

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

211be85cf285c35e7cd6ef6ef24189db.png

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

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

insert into MyLog ([CreateDate], [Origin], [LogLevel], [Message], [StackTrace])

values (@createDate, @origin, @logLevel, @message, @stackTrace);

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

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

这样,我们的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如下:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

throwExceptions="true" internalLogFile="c:\nlog.txt" internalLogLevel="Debug">

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

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

throwExceptions="true" internalLogFile="c:\nlog1.txt" internalLogLevel="Debug">

layout="${longdate} ${level}:${event-context:item=logMessage}" />

layout="${longdate} ${level}:${message} ${stacktrace}" />

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

类似 ,我们就可以定义自己的参数。

然后在写日志的时候,可以通过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);

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值