NLog写入Mongo日志配置
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日志配置的更多相关文章
- NLog文章系列——如何配置NLog(转)
NLog使用方法 作者:Jaros?aw Kowalski <> 翻译:CrazyCoder(由衷感谢他的热心!!) 原文:http://www.nlog-project.org/conf ...
- NLog文章系列——如何配置NLog
NLog支持以多种不同方式配置,目前同时支持直接编程和使用配置文件两种方法.本文将对目前支持的各种配置方式作详细描述. 日志配置 通过在启动的时候对一些常用目录的扫描,NLog会尝试使用找到的配置信息 ...
- Haproxy日志配置
haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件.下面以centos6.4为例,haproxy使用系统自带的rpm报 ...
- LOG4NET日志配置及使用
Log4net的安装 Install-Package log4net 1.先弄个日志记录的类 /// <summary> /// 使用LOG4NET记录日志的功能,在WEB.CONFIG里 ...
- Apache日志配置参数详细说明
Apache日志按时间分段记录 在apache的配置文件httpd.conf中找到ErrorLog logs/error_log及CustomLog logs/access_log common Li ...
- Apache日志配置详解(rotatelogs LogFormat)
logs/error_logCustomLog logs/access_log common--默认为以上部分 修改为如下: ErrorLog "|/usr/sbin/rotatelogs ...
- nginx日志配置
nginx日志配置 http://www.ttlsa.com/linux/the-nginx-log-configuration/ 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如 ...
- Nginx日志配置及日志切割
日志配置 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如access_log.log_format.open_log_file_cache.log_not_found.log_s ...
- 支持异步写入的日志类,支持Framework2.0
因为工作需要需要在XP上运行一个C#编写的Winform插件,我就用Framework2.0,因为存在接口交互所以想保留交易过程的入参出参. 考虑到插件本身实施的因素,就没有使用Log4.NLog等成 ...
随机推荐
- DelegatingFilterProxy类的作用
使用过springSecurity的朋友都知道,首先需要在web.xml进行以下配置 <filter> <filter-name>springSecurityFilterCha ...
- [转]VS2013中使用Git建立源代码管理
本文转自:https://blog.csdn.net/bodybo/article/details/38976549 第一次在VS2013中使用Git,也是第一次使用Git,各种不熟悉.百度各种使用经 ...
- finally 的作用是什么?
在java中finally首先必须使用在所有catch的最后位置, 无论是否抛出异常,finally代码块总是会被执行.就算是没有catch语句同时又抛出异常的情况下,finally代码块任然会被执行 ...
- spring boot 报错 Failed to read HTTP message
2008-12-13 15:06:03,930 WARN (DefaultHandlerExceptionResolver.java:384)- Failed to read HTTP message ...
- 面试----java基础集合---------------------comparable和comparator 的区别
comparable接口 是主要是用来自定义类存储在主要是TreeSet,TreeMap(键)集合中存储时,自定通过实现这种接口得到自然排序的功能. comparator 接口 是主要是用来 ...
- Android - fragment之间数据传递
<Fragment跳转时传递参数及结果回传的方法> <Fragment详解之五——Fragment间参数传递> <Android解惑 - 为什么要用Fragment.se ...
- K:跳表
跳表(SkipList)是一种随机化的数据结构,目前在redis和leveldb中都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表, 就能轻松实现一 ...
- windows 查看端口
windowsnetstat命令查看进程:netstat -ano查看占用端口进程:netstat -ano|findstr “端口号”,例子netstat -ano|findstr “8080”.t ...
- 镶嵌数据集 Mosaic Dataset 的常见数据组织方式
镶嵌数据集是ESRI公司推出一种用于管理海量影像数据的数据模型,定义在GeoDatabase数据模型中. 它的常见数据组织方式有两种: 1. 源镶嵌数据集 Source Mosaic Dataset ...
- ciscn2018-pwn-wp
前言 2018全国大学生网络安全竞赛 ,做了2 道题 task_supermarket change_desc 里面调用 realloc 会触发 uaf 利用 uaf 修改 obj->desc_ ...