使用NLog记录业务日志到数据库
项目中很多时候要记录业务日志,其实是可以直接用日志框架计入数据库的.
使用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记录业务日志到数据库的更多相关文章
- 使用MongoDB 记录业务日志
最近公司有个需求,要对业务日志进行记录并根据日志排查问题,以前都是使用log4net之类的日志组件来记录到文件,这种方式已经不能满足业务的需要,因为日志文件会很大,即使进行分割后,查找也是很不方便,何 ...
- spring集成mongodb通过aop记录业务日志
1. 编辑 pom.xml 添加 maven 依赖 <!-- mongodb --> <dependency> <groupId>org.mongodb</g ...
- Appfuse:记录操作日志
appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...
- 使用SpringBoot AOP 记录操作日志、异常日志
平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能:我们在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发 ...
- log4net 添加自定义日志到数据库
添加操作日志到数据库举例: (一)建立数据库的操作日志表,如下我建立了一个简单的日志表 (二)配置文件中的配置如下 <log4net> <!--错误日志记录数据库--> < ...
- 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)
http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- 转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因
转:http://www.cnblogs.com/tider1999/p/4308440.html NLog的安装请百度,我安装的是3.2.NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里 ...
- 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil
封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...
随机推荐
- 目标检测的图像特征提取(一)HOG特点
1.HOG特点: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检測的特征描写叙述子.它通过计算和统计图像局部区 ...
- Lua学习 2) —— Android与Lua互调
2014-07-09 一.Android类调用lua并回调 Android调用Lua函数,同一时候把类作为參数传递过去.然后再Lua中回调类的函数 调用lua mLuaState = LuaState ...
- git建tag备忘
1.git tag -a v1.1.8_20180613 -m '实时上传位置等功能提交测试' 2. git push origin v1.1.8_20180613
- android反射组件 (一个)java 它们的定义annotation基础知识
它们的定义annotation它由三部分组成: 它们的定义annotation.使用annotation班.annotation的处理方法. 一.自己定义annotation 元注解包含下面: 1) ...
- .Net中使用数据库(sqlite)的大体流程(简单向)
说来数据库,各种语言各种数据库在操作上大体无异,基本都是连接数据库.操作数据库.关闭数据库连接的流程,不过Sqlite由于是单文件数据库,相比其他服务器的数据库连接更简单,只需要给定数据库文件的路径即 ...
- Win10中解决Prolific PL2303出现错误代码10的问题
PL2303 是Prolific 公司生产的一种高度集成的RS232-USB接口转换器,在Win10中默认安装的驱动程序会出现错误代码10的问题,如下图所示: 下载Win10上可以用的PL2303驱动 ...
- 深入理解Delphi的消息机制(别人写的,简明扼要,用来复习)
永远记住,无论你是用 SDK 还是借用 VCL 来创建窗口,都要遵循 Windows 的游戏规则,即先注册窗口类,然后再创建窗口实例,在消息循环中写实现代码.你还要知道 Windows 已经为了我们预 ...
- 访问类的私有属性(RTTI和模仿类2种方法)
如何访问类的私有属性? 下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享): 一.利 ...
- java-mysql(1)
用java写过不少单侧,用到的数据存储也是用xml或者直接文件,但是关于数据库这块很少用到,最近就学习了下java链接mysql数据库. 第一:创建一个测试用的数据库 Welcome to the M ...
- JPA 报错解决方案 com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'test_db' when IDENTITY_INSERT is set to OFF.
这种错误插入数据时就是hibernate的自增长字段生成规则应该用native 在字段前加入注解 @GeneratedValue(generator="generator") @G ...