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

使用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. 大约Android远程监控APP源代码

    这篇文章的目的,关心询问名人,要打开源代码.这里说明,远程监控摄像头场外,相反,用手机摄像头摄像头server上,要理解这一点.关于非常网上的文章达到server道路.它能够准确,念就乱发博文,当然假 ...

  2. Why aren't more desktop apps written with Qt?(quora.com系列文章)

    As far as I know and have understood in my experience with Qt, it's a very good and easy to learn li ...

  3. WPF 控件的内容属性

    WPF的内容属性不应定都是content, 例如TextBlock的内容属性是Text Panel的内容属性是Children ListBox的内容属性是Items

  4. Java 知识笔记 - 类、集合、多线程、IO、JVM(最后一次更新,2019年02月17日)

    目录 Class 内部类.静态内部类.匿名内部类.局部内部类 Collection Java Collection Set Queue Map Collections Arrays System Co ...

  5. jquery each()的用法--遍历键值对

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

  6. MEF 插件式开发 - 小试牛刀

    原文:MEF 插件式开发 - 小试牛刀 目录 MEF 简介 实践出真知 面向接口编程 控制反转(IOC) 构建入门级 MEF 相关参考 MEF 简介 Managed Extensibility Fra ...

  7. iOS Touch ID使用

    1.首先导入头文件 #import <LocalAuthentication/LocalAuthentication.h> 2.关键代码 - (void)validateTouchID { ...

  8. linux的自动化操作相关使用方法汇总 专题

    Crontab中的除号(slash)到底怎么用? crontab 是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash)的使用,那么这个除号到底标示什么意思,使用中有哪些需要 ...

  9. 微信小程序把玩(十)swiper组件

    原文:微信小程序把玩(十)swiper组件 Android写过轮播图的痛楚只有写过的知道,相对还是比较麻烦的,并没有一个轮播图组件,有个ViewPage也需要自己定制,IOS则多用UIScroller ...

  10. mysql索引创建&查看&删除

    1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...