使用NLog记录业务日志到数据库
2015-09-28 16:17
459 查看
项目中很多时候要记录业务日志,其实是可以直接用日志框架计入数据库的.
使用NLog并不是只能将日志主体插入数据库,而是可以根据实际情况自定义任意列记入.非常方便.而且很容易实现
下面是用NLog记录业务日志到数据库
1.首先下载NLog的DLL,下载地址
https://github.com/NLog/NLog
2.项目里面引用NLog.dll
3.创建一个日志工具类
4.然后在 Global.asax的Application_End中加入 DBLog.Flush();用来在网站停止时,将日志全部插入
5.在网站根目录添加NLog.config文件
6.数据库创建表
这样就大功告成了,在插入日志的地方写就可以了
DBLog.Process(key, "lnUserName", "O001OrderNo", key + "执行" + DateTime.Now, "K1KeyWord");
其中RequestKey等参数可以根据实际情况自己定义
这几句是用来设置如何插入的
使用NLog并不是只能将日志主体插入数据库,而是可以根据实际情况自定义任意列记入.非常方便.而且很容易实现
下面是用NLog记录业务日志到数据库
1.首先下载NLog的DLL,下载地址
https://github.com/NLog/NLog
2.项目里面引用NLog.dll
3.创建一个日志工具类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using NLog; namespace LN.Tool { public class DBLog { readonly static Logger processLogger = LogManager.GetLogger("LnProcessDBLog"); public static void Process(string key,string userName, string orderNo, string content, string keyWord) { LogEventInfo theEvent = new LogEventInfo(LogLevel.Info, "", content); theEvent.Properties["RequestKey"] = key; theEvent.Properties["UserName"] = userName; theEvent.Properties["OrderNo"] = orderNo; theEvent.Properties["KeyWord"] = keyWord; processLogger.Log(theEvent); } public static void Flush() { LogManager.Flush(); } } }
4.然后在 Global.asax的Application_End中加入 DBLog.Flush();用来在网站停止时,将日志全部插入
protected void Application_End(object sender, EventArgs e) { DBLog.Flush(); }
5.在网站根目录添加NLog.config文件
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true"> <targets> <default-wrapper xsi:type="BufferingWrapper" bufferSize="100" FlushTimeout="10000"> <wrapper-target xsi:type="AsyncWrapper"/> </default-wrapper> <!-- write logs to file --> <target xsi:type="File" name="LnProcessDBLogTarget2" fileName="D://logs/${shortdate}.log" layout="${longdate} ${event-properties:item=RequestKey} ${event-properties:item=UserName} ${event-properties:item=OrderNo} ${message} ${event-properties:item=KeyWord}" /> <target xsi:type="Database" name="LnProcessDBLogTarget"> <!-- SQL command to be executed for each entry --> <commandText>INSERT INTO [LogEntries](RequestKey, UserName,OrderNo,[Content],KeyWord,LogTime,CTime) VALUES(@RequestKey,@UserName,@OrderNo,@Content,@KeyWord,@LogTime,getdate())</commandText> <!-- parameters for the command --> <parameter name="@RequestKey" layout="${event-properties:item=RequestKey}" /> <parameter name="@UserName" layout="${event-properties:item=UserName}" /> <parameter name="@OrderNo" layout="${event-properties:item=OrderNo}" /> <parameter name="@Content" layout=" ${message}" /> <parameter name="@KeyWord" layout="${event-properties:item=KeyWord}" /> <parameter name="@LogTime" layout="${longdate}" /> <!-- connection string --> <dbProvider>System.Data.SqlClient</dbProvider> <connectionString>server=.\SQLEXPRESS;database=MyLogs;integrated security=sspi</connectionString> </target> </targets> <rules> <logger name="LnProcessDBLog" minlevel="Trace" writeTo="LnProcessDBLogTarget" final="true" /> <logger name="*" minlevel="Trace" writeTo="LnProcessDBLogTarget2" /> </rules> </nlog>
6.数据库创建表
CREATE TABLE [dbo].[LogEntries]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [RequestKey] [varchar](50) NOT NULL, [UserName] [varchar](50) NOT NULL, [OrderNo] [varchar](50) NOT NULL, [Content] [varchar](5000) NOT NULL, [KeyWord] [varchar](500) NOT NULL, [LogTime] [datetime2](7) NOT NULL, [CTime] [datetime] NOT NULL, CONSTRAINT [PK_LogEntries] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
这样就大功告成了,在插入日志的地方写就可以了
DBLog.Process(key, "lnUserName", "O001OrderNo", key + "执行" + DateTime.Now, "K1KeyWord");
其中RequestKey等参数可以根据实际情况自己定义
<default-wrapper xsi:type="BufferingWrapper" bufferSize="100" FlushTimeout="10000"> <wrapper-target xsi:type="AsyncWrapper"/> </default-wrapper>
这几句是用来设置如何插入的
<wrapper-target xsi:type="AsyncWrapper"/>表示异步插入
相关文章推荐
- php使用MemCache查询数据库
- Redis 禁用FLUSHALL FLUSHDB KEYS 命令
- SQL Server Join 连接和笛卡尔积问题
- 关于一些数据库名词的解释
- MySQL 全备份与增量备份 全恢复与增量恢复
- Mysql 主从复制-原理篇
- Oracle中如何用SQL检测字段是否包括中文字符
- SQLHelper---赵晓虎(简洁,全面)
- redis php扩展安装
- 101个MySQL开源数据库调试和优化技巧
- sqlite插入记录值为纯数字的字符串的问题以及sqlite语句中字符串的拼接
- SQLHelper用到的配置文件格式
- 数据库版本管理工具flyway
- SQL中Group By的使用
- 分布式缓存系统Memcached简介与实践
- SQLHelper初实现---杨中科版(易懂,代码多点)
- ubuntu 安装 Mongodb
- mysql 循环插入
- 5.5.xx MySQL 编译安装
- sql 查看 锁定的表 或者 未提交 的事务