Web网站中引入了NLog日志,日志记录在Mongo数据库中,经过两天的简单学习,现简要记录说明下:

首先贴出NLog的学习地址: https://github.com/NLog/NLog/wiki/Tutorial ,使用的NLog版本为:4.5+

以及此次项目中的NLog配置文档 :(NLog.Config)

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> <extensions>
<add assembly="NLog.Mongo"/>
<add assembly="NLog.Web"/>
</extensions>
<targets>
<target xsi:type="Mongo"
name="mongoDefault"
connectionString="mongodb://192.168.106.56/MongoDB"
collectionName="SysErrorLog"
cappedCollectionSize="">
<field name="Date" layout="${longdate}"/>
<property name="RequestIP" layout="${aspnet-request-ip}" />
<property name="UserName" layout="$UserName" />
<property name="BaseDir" layout="${aspnet-appbasepath}"/>
<property name="QueryUrl" layout="${aspnet-request-url}"/>
<property name="Method" layout="${aspnet-request-method}"/>
<property name="Controller" layout="${aspnet-mvc-controller}"/>
<property name="Action" layout="${aspnet-mvc-action}" />
<property name="FormContent" layout="${aspnet-request-form}"/>
<property name="QueryContent" layout="${aspnet-request-querystring}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" maxlevel="Fatal" writeTo="mongoDefault"/>
</rules>
</nlog>

相关节点的说明:

<target> 日志输出目标。目前NLog支持八十余种输出,如控制台,邮件,窗体,数据库等。具体支持的目标,可参考 这里 。一个<targets>中可以配置多个<target>输出。

    1、target属性中标记了当前 target 的名称以及要输出到相关MongoDB的配置。

    2、<field>指定 document中的根字段,name 对应的根节点名称,layout 对应输出值

    3、<property> 指定 document中的properties节点中的子节点,name 对应的根节点名称,layout 对应输出值

    4、不同的应用中,NLog能获取的系统参数可以看 这里 。

<rules> 指定 loger 的输出目标,即指定 logger 使用哪个 target 进行输出日志。本节配置指定最小级别为Info,最高级别为Fatal,并使用名称为 "mongoDefault" 的 target。

<extensions> NLog使用的扩展库。

由上边两个图知道,我们使用的MongoDB配置引用了 NLog.Mongo 动态库。layout中使用获取的 Web 参数使用了 NLog.Web动态库。不仅要在Nuget上获取这两个动态库,还应该在配置中引入。

关于日志中加入用户参数的使用说明:

       

public static void Error(Exception ex)
{

Logger logger = LogManager.GetCurrentClassLogger();

        var UserName = Config.Identity?.Name ?? "";
        var Target = ex.TargetSite.Name ?? "";
        var parms = ex.Data?.ToDictionary().Select(k => k.Key + "=" + k.Value).Join() ?? "";

       LogEventInfo theEvent = new LogEventInfo();
theEvent.Exception = ex;
theEvent.Message = ex.Message;
theEvent.Properties["Target"] = Target;
theEvent.Properties["Parameters"] = parms;
theEvent.Properties["UserName"] = UserName;
logger.Error(theEvent);
}

使用LogEventInfo写入自定义参数。本节中,将用户自定义的参数都放入到document的Properties节点中。

注:如果对应的节点值为空,则NLog不会写入该节点。

程序调用代码:

            try
{
throw new DivideByZeroException("Opps");
}
catch (Exception e)
{
e.Data.Add(nameof(a),a);
e.Data.Add(nameof(b), b);
Error(e);
}

输入日志格式如下:

    "_id" : ObjectId("5c8867288d14af392479e58f"),
"Date" : "2019-03-13 10:12:56.5343",
"Level" : "Error",
"Logger" : "Test.Web.Window.LogHelper",
"Message" : "Opps",
"Exception" : {
"Message" : "Opps",
"BaseMessage" : "Opps",
"Text" : "System.DivideByZeroException: Opps\r\n 在 Test.Web.Window.Controllers.TestController.Divid(Double a, Double b) 位置 D:\\Projects\\Common\\Test.Web\\Test.Web\\Test.Web.Window\\Controllers\\TestController.cs:行号 35",
"Type" : "System.DivideByZeroException",
"HResult" : -,
"Source" : "Test.Web.Window",
"MethodName" : "Divid",
"ModuleName" : "Test.Web.Window",
"ModuleVersion" : "1.0.0.0"
},
"Properties" : {
"RequestIP" : "::1",
"UserName" : "admin",
"BaseDir" : "D:\\Projects\\Common\\Test.Web\\Test.Web\\Test.Web.Window\\",
"QueryUrl" : "http://localhost/test/index",
"Method" : "GET",
"Controller" : "test",
"Action" : "index",
"Target" : "Divid",
"Parameters" : "a=5,b=0"
}

NLog写入Mongo日志配置的更多相关文章

  1. NLog文章系列——如何配置NLog(转)

    NLog使用方法 作者:Jaros?aw Kowalski <> 翻译:CrazyCoder(由衷感谢他的热心!!) 原文:http://www.nlog-project.org/conf ...

  2. NLog文章系列——如何配置NLog

    NLog支持以多种不同方式配置,目前同时支持直接编程和使用配置文件两种方法.本文将对目前支持的各种配置方式作详细描述. 日志配置 通过在启动的时候对一些常用目录的扫描,NLog会尝试使用找到的配置信息 ...

  3. Haproxy日志配置

    haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件.下面以centos6.4为例,haproxy使用系统自带的rpm报 ...

  4. LOG4NET日志配置及使用

    Log4net的安装 Install-Package log4net 1.先弄个日志记录的类 /// <summary> /// 使用LOG4NET记录日志的功能,在WEB.CONFIG里 ...

  5. Apache日志配置参数详细说明

    Apache日志按时间分段记录 在apache的配置文件httpd.conf中找到ErrorLog logs/error_log及CustomLog logs/access_log common Li ...

  6. Apache日志配置详解(rotatelogs LogFormat)

    logs/error_logCustomLog logs/access_log common--默认为以上部分 修改为如下: ErrorLog "|/usr/sbin/rotatelogs ...

  7. nginx日志配置

    nginx日志配置 http://www.ttlsa.com/linux/the-nginx-log-configuration/ 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如 ...

  8. Nginx日志配置及日志切割

    日志配置 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如access_log.log_format.open_log_file_cache.log_not_found.log_s ...

  9. 支持异步写入的日志类,支持Framework2.0

    因为工作需要需要在XP上运行一个C#编写的Winform插件,我就用Framework2.0,因为存在接口交互所以想保留交易过程的入参出参. 考虑到插件本身实施的因素,就没有使用Log4.NLog等成 ...

随机推荐

  1. vue 2.x之组件的数据传递(一)

    这是根据官方提供的脚手架vue-cli搭建,通过简单的案例来介绍vue数据的传递的方式,根据自己平时用到的,来做简单的总结: 1.父组件传递数据给子组件 父组件传递数据给子组件,需要把子组件引入,并挂 ...

  2. Ionic3 UI组件之 autocomplete

    无论是web开发还是app开发,autocomplete是常用组件之一. 可惜截止到目前,ionic官方并未提供此组件. ionic2-autocomplete是GitHub上的开源的Ionic2组件 ...

  3. 【模板】Bellman—Fort 单源最短路径算法

    2333 适用于边集储存 #include<bits/stdc++.h> using namespace std; const int inf=0x3fffffff; ],t[],d[], ...

  4. 十八、curator recipes之DistributedDelayQueue

    简介 curator实现了类似DelayQueue的分布式延迟队列 官方文档:http://curator.apache.org/curator-recipes/distributed-delay-q ...

  5. Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework

    昨晚在 使用spring aop, 然后Tomcat启动的时候, 报了这么个错: Caused by: org.springframework.beans.factory.BeanCreationEx ...

  6. 后台管理UI+功能

    kingRoad功能强大,丰富各种功能和插件,自定义开发功能组件及样式,使用webpack方式集成和纯html两种,UI(自定义开发和AdminLTE的集成优化),弹窗功能使用(Layer弹窗,并与框 ...

  7. POJ2251(KB1-B 三维BFS)

    Dungeon Master Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40872 Accepted: 19936 Desc ...

  8. UBuntu安装配置记录

    记得是06年左右第一次安装的 Linux,当时是下载的 Fedora镜像,版本已经记不清了,在商业街的电脑维修店刻的盘,回来后兴冲冲地和XP一起安装的双系统.其实就是直接的体验了一把,只是看了看X-W ...

  9. xib Nib IB 可视化编程详解

    简单的说,Xib就是拖控件编程,也可以说是可视化编程. 相对于代码,使用IB和xib文件来组织UI,可以省下大量代码和时间,从而得到更快的开发速度. 如果你曾经受到过微软家Visual Basic或者 ...

  10. CSS字体无法设置成功的问题

    在 CSS 中设置字体名称,直接写中文是可以的.但是在文件编码(GB2312.UTF-8 等)不匹配时会产生乱码的错误.xp 系统不支持 类似微软雅黑的中文. 方案一: 你可以使用英文来替代. 比如 ...