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

使用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. cross-compile-openssl-windows.sh,cross-compile-curl-windows.sh,cross-compile-zlib-windows.sh,build-zlib-visual-studio-2015-cli.bat

    https://gist.github.com/artynet build zlib with Visual Studio CLI toolhttps://gist.github.com/artyne ...

  2. android反射组件 (一个)java 它们的定义annotation基础知识

    它们的定义annotation它由三部分组成: 它们的定义annotation.使用annotation班.annotation的处理方法. 一.自己定义annotation  元注解包含下面: 1) ...

  3. EF CodeFirst的步骤

    1 创建各个实体类 2 创建一个空数据模型,然后删除掉,为了引入Entity Framework和System.Data.Entity 3 为实体类增加标注 4 为实体增加导航属性 5 在App.co ...

  4. jquery对象及页面加载完成写法

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  5. vmware linux无法正常上网

    不知道自己怎么搞的整的vmware里面的fedora 12 不能正常上网,但是在宿主机上ping XXX,是正常的.当service network restart 的时候提示MAC有问题.网上百度了 ...

  6. redis SERVER INSTALL WINDOWS SERVICE

    以管理 员身份 运行 CMD 命令,进入redis所在目录,并运行下 脚本redis-server --service-install redis.windows-service.conf --log ...

  7. 【码云周刊第 32 期】程序员眼中的 Vue 与 Angular !

    码云项目推荐 基于 Vue 的项目: 1.项目名称:基于 Vue.js 的 UI 组件库 项目简介:iView 是一套基于 Vue.js 的 UI 组件库,主要服务于 PC 界面的中后台产品. 项目地 ...

  8. 正试图在 os 加载程序锁内执行托管代码

    正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码... 当我在窗体初始化的时候,调用了一个外部的dill时,它就不知什么原因的 抛出一个“正试图在 ...

  9. 一篇文章搞定JS类型转换

    啥要说这个东西?一道面试题就给我去说它的动机.题如下: var bool = new Boolean(false); if (bool) { alert('true'); } else { alert ...

  10. PC-lint 简明教程(C/C++静态代码检查工具)

    前言 PC-lint是一款小而强大的C/C++静态代码检查工具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误.在很多专业的软件公司如Microsoft,PC-Lint检查无错误无 ...