项目中很多时候要记录业务日志,其实是可以直接用日志框架计入数据库的.

使用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"/>表示异步插入

使用NLog记录业务日志到数据库的更多相关文章

  1. 使用MongoDB 记录业务日志

    最近公司有个需求,要对业务日志进行记录并根据日志排查问题,以前都是使用log4net之类的日志组件来记录到文件,这种方式已经不能满足业务的需要,因为日志文件会很大,即使进行分割后,查找也是很不方便,何 ...

  2. spring集成mongodb通过aop记录业务日志

    1. 编辑 pom.xml 添加 maven 依赖 <!-- mongodb --> <dependency> <groupId>org.mongodb</g ...

  3. Appfuse:记录操作日志

    appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...

  4. 使用SpringBoot AOP 记录操作日志、异常日志

    平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能:我们在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发 ...

  5. log4net 添加自定义日志到数据库

    添加操作日志到数据库举例: (一)建立数据库的操作日志表,如下我建立了一个简单的日志表 (二)配置文件中的配置如下 <log4net> <!--错误日志记录数据库--> < ...

  6. 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

    http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...

  7. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  8. 转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因

    转:http://www.cnblogs.com/tider1999/p/4308440.html NLog的安装请百度,我安装的是3.2.NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里 ...

  9. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil

    封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...

随机推荐

  1. 基于IOCP的高速文件传输代码

    //服务端: const   //transmit用的参数   TF_USE_KERNEL_APC     = $20;   //命令类型   CMD_CapScreen             =  ...

  2. HTTP的请求方法一共有9种,有OPTIONS, HEAD, GET, POST等等(消息头有图,十分清楚)

    请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源]     GET方法用来请求已被URI识别的资源.指定的资源经服务器端解析后 ...

  3. Win8 Metro(C#)数字图像处理--2.52图像K均值聚类

    原文:Win8 Metro(C#)数字图像处理--2.52图像K均值聚类  [函数名称]   图像KMeans聚类      KMeansCluster(WriteableBitmap src,i ...

  4. C/C++网络编程时注意的问题小结

    1.网络编程在自己定义结构体实现协议的时候,一定要注意字节对齐这个问题.否则sizeof和强制转换指针的时候都会出现很难发现的bug. 什么是字节对齐自行百度. #pragma pack (1)//字 ...

  5. WPF ListView 数据懒加载

    实现方式:当滑动条触底时,加载数据 xaml代码: <ListView ScrollViewer.ScrollChanged="ListView_ScrollChanged" ...

  6. 使用内核对象Mutex可以防止同一个进程运行两次

    用互斥法实现防止程序重复运行,使用内核对象Mutex可以防止同一个进程运行两次.注意:是名称相同的进程,而不是exe,因为exe程序可以改名. using System.Threading; publ ...

  7. NBU客户端安装失败

    该服务器是阿里云上的centos6.8,是用来做oracle服务器,买来之后进行测试,发现没有安装图形化界面,还有部分包也没有安装.在oracle安装完成之后,尝试安装NBU的客户端,结果发生报错:T ...

  8. painter半透明的 底层窗口全透明背景

  9. Angucomplete —— AngularJS 自动完成输入框

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  10. Vista之前的版本,默认本地登陆用户都以管理员权限启动程序

    Vista之前的版本,默认本地登陆用户都以管理员权限启动程序,之后的OS版本默认都没有管理员权限,需要用户提权才能做某些操作,否则需要管理员权限的操作都会失败MSSQL是用户名账号连接,Socket方 ...