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

NLog的安装请百度,我安装的是3.2。NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里讲怎么写入数据库,及常常会遇到的问题:

1、layout render

  NLog内置了很多日志内容格式,样子就是${longdate}之类的,详见:https://github.com/NLog/NLog/wiki/Layout-Renderers

2、如果我们要自定义日志:

<target xsi:type="Database" name="LogOnlog" connectionStringName ="DataBase" >
<commandText>
Insert into MyLog(Operator_name,Operator_Type,IP,DateTime,Operation) Values(@Operator_name,@Operator_Type,@IP,@DateTime,@Operation);
</commandText>
<parameter name = "@Operator_name" layout = "${event-context:item=Operator_name}"/>
<parameter name = "@Operator_Type" layout = "${event-context:item=Operator_Type}" />
<parameter name = "@DateTime" layout = "${event-context:item=DateTime}"/>
<parameter name = "@IP" layout = "${event-context:item=IP}" />
<parameter name = "@Operation" layout = "${event-context:item=Operation}" />

</target>

</targets>

<rules>
<logger name="*" minlevel="Trace " writeTo="LogOnlog"/>
</rules>
${event-context:item=Operation}中:后面的“Operation”在生成Logger时会形成名为“Operation”的键,我们就可以在代码中对他赋值,详见:https://github.com/NLog/NLog/wiki/EventContext-Layout-Renderer。我代码中是这样:

Logger logger = LogManager.GetCurrentClassLogger(); //不能用 Logger logger =new Logger();,会报错:“NLog.Logger.Logger()”不可访问,因为它受保护级别限制
LogEventInfo lei = new LogEventInfo();
lei.Properties["Operator_name"] = Opeator_Name;
lei.Properties["Operator_Type"] = Operator_Type;
lei.Properties["DateTime"] = DateTime.Now;
lei.Properties["IP"] = GetClientIPOrAdd.GetIP();
lei.Properties["Operation"] = Operation;
lei.Level = LogLevel.Info;
logger.Log(lei);

3、要点:当我们修改 NLog.config 文件时,要重新编译解决方案,修改才会起作用。这个应该是很多人使用NLog不成功的一个巨坑!

  至于网文中及NLog文档中介绍的:加入 aotuReload="true" 属性的办法,不起作用,不知道是不是我有没有注意到的方法。

4、收集的讲解NLog比较详细的文章:

  http://www.cnblogs.com/sorex/archive/2013/01/31/2887174.html

  http://www.cnblogs.com/Gyoung/archive/2012/10/18/2729613.html

  http://blog.csdn.net/viviachen/article/details/19171661

时间: 2024-10-25 15:30:36

NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因的相关文章

Yii2 自定义日志文件写日志

头部引入log类use yii\log\FileTarget; $time = microtime(true);$log = new FileTarget();$log->logFile = Yii::$app->getRuntimePath() . '/logs/zhidemy.com.log'; //文件名自定义$log->messages[] = ['test',1,'application',$time];$log->export(); 这样基本就能写出来了,先看一下$lo

自定义日志文件写日志

use yii\log\FileTarget; $time = microtime(true); $log = new FileTarget(); $log->logFile =  Yii::$app->getRuntimePath()."/logs/a.log'; $log->message[] = ['test',1,'application',$time]; $log->export(); /** [0] => message (mixed, can be a

什么是事务日志和虚拟日志文件(VLF)

事务日志是SQL Server的一个组成部分.每个数据库都有一个存储在独立于数据文件的日志文件.事务日志基本上记录了所有数据库修改. 例如,当用户发出一个插入操作(INSERT),它被会被记录在事务日志中.如果出现了错误,数据库可以回滚或还原事务之前的状态,并防止数据损坏.再比如,一个员工需要将2000条数据插入到数据库中,这时候突然间服务器断电.由于insert语句已经写入了事务日志并且知道了出现了错误,它将会回滚这次操作.如果没有这个功能,你可以想象我们需要数据筛选看到底成功插入了多少行,然

pg_resetxlog - 重置一个 PostgreSQL 数据库集群的预写日志以及其它控制内容

SYNOPSIS pg_resetxlog [ -f ] [ -n ] [ -o oid] [ -x xid] [ -l fileid,seg] datadir DESCRIPTION 描述 pg_resetxlog 清理预写日志(WAL)并且可以选择地重置其它一些控制信息(存储在 pg_control 文件中). 有时候,如果这些文件崩溃了,我们需要这个功能. 我们一定只把它用作最后的方法,就是说只有因为这样的崩溃导致服务器无法启动的时候才使用. 在运行这个命令之后,我们可能可以启动服务器了,

使用log4j把日志写到mysql数据库

log4j可以支持将log输出到文件,数据库,甚至远程服务器,本教程以mysql数据库为例来讲解: 1.数据库设计 数据库表 表4-1日志表(log) 字段名 字段解释 数据类型 数据 长度 是否为空 是否为主键 是否为外键 id 日志编号 bigint 20 否 是 否 create_time 创建时间 datetime 否 否 否 logs 日志内容 varchar 200 否 否 否 数据库创建: Create database log; 切换数据库: Use log: 创建表: CREA

ASP.NET Core 开发-Logging 使用NLog 写日志文件

ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以轻松输出到控制台. 学习Logging 组件的相关使用,使用NLog 将日志写入到文件记录. Logging 使用 新建一个 ASP.NET Core 项目,为了方便,我选择Web 应用程序,改身份验证 改为 不进行身份验证. 新建好以后,会自动引用好对应的 类库.这样我们就可以直接使用 Logge

python(13)---发邮件、写日志、操作redis数据库

一.写邮件 import yagmail user = '[email protected]' password = 'rtcxbuejmqrdgjcd' #不是qq密码,是邮件授权码 在qq邮箱,设置--账户--开启POP3/SMTP服务,获得授权码 m=yagmail.SMTP(host='smtp.qq.com',user=user,password=password) #host-- 163邮箱用 tp.163.com m.send(to=['[email protected]','xx

Log4j写日志文件使用详解

Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合 一.今天在使用commongs-logging.jar和log4j.properties来输出系统日志的时候,发现日志能够成功的输出到控制台,但是去不能写到目的文件中,具体的步骤和原因如下: 1. 只在项目中引入commons-logging.jar commons-logging.jar 使用 Log logger = LogFactory.getLogger(XXX.class), 如果有log4j.pr

重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)

一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用法及配置文件,这对于有些小工具.小程序.小网站来说,有点“杀鸡焉俺用牛刀”的感觉,而且如果对这些日志框架不了解,可能输出来的日志性能或效果未毕是与自己所想的,鉴于这几个原因,我自己重复造轮子,编写了一个轻量级的异步写日志的实用工具类(LogAsyncWriter),这个类还是比较简单的,实现思路也很