nlog官方帮助_Nlog日志组件简介

NLog简介

NLog是一个简单灵活的.NET日志记录类库,NLog的API非常类似于log4net,配置方式非常简单。支持多种形式输出日志:文本文件、系统日志、数据库、控制台、邮箱等

1.NLog简介

在nuget控制台输入安装nlog命令: Install-Package NLog.Config

Nlog配置的方式常用的有两种

1.直接在使用应用程序配置文件或者web的配置文件(app.config / web.config)

2.NLog.config 这个是比较好的一个形式(推荐)

配置文件中的主要标签是:targets和rules:

- 定义日志的目标/输出,下级是

- 定义日志的路由规则,下级是

2.标签介绍

标签

autoReload            修改配置文件后是否允许自动加载无须重启程序

throwExceptions     内部日志系统抛出异常(建议throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。)

internalLogLevel    可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭

internalLogFile       把内部的调试和异常信息都写入指定文件里

标签

定义了日志的输出,可以设置文件名称和格式,输出方式。

name                      自定义该target的名字,可供rule规则里使用

type                        定义类型,官方提供了很多可选类型,常用的还是 File Database Colored Console Mail

layouts                   用来规定布局样式,语法“${属性}”,可以把上下文信息插入到日志中,官方提供的可以用的属性见文末附录

标签

定义日志的记录规则,记录范围

name          记录者的名字

minlevel      最低级别

maxlevel     最高级别

level         单一日志级别

levels               一系列日志级别,由逗号分隔。

标签

变量定义

3.一个简单的栗子

把日志记录到彩色控制台,log文本文件和mysql数据库。首先添加Nlog.config文件如下,放在控制台项目的bin/debug目录下

INSERT INTO tbLog(Timestamp,Level,Message,StackTrace) VALUES(@time_stamp, @level, @message, @stacktrace);

View Code

LogHelper是通过拓展String实现的一个简单的helper,调用代码如下:

classProgram

{static void Main(string[] args)

{

Console.WriteLine("---------------------------begin");"helper logs debug".Debug();"helper logs info".Info();"helper logs warn".Warn();"helper logs error".Error();"helper logs fatal".Fatal();

Console.WriteLine("---------------------------end");

Console.ReadKey();

}

}public static classLogHelper

{private static ILogger logger =GetLogger();private staticILogger GetLogger()

{

LogManager.Configuration= new XmlLoggingConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory + @"Nlog.config"));returnLogManager.GetCurrentClassLogger();

}///

///调试///

///

public static void Debug(this stringdebug)

{

logger.Debug(debug);

}///

///信息///

///

public static void Info(this stringinfo)

{

logger.Info(info);

}///

///警告///

///

public static void Warn(this stringwarn)

{

logger.Warn(warn);

}///

///错误///

///

public static void Error(this stringerror)

{

logger.Error(error);

}///

///严重错误///

///

public static void Fatal(this stringfatal)

{

logger.Fatal(fatal);

}///

///跟踪///

///

public static void Trace(this stringtrace)

{

logger.Trace(trace);

}

}

View Code

记录效果如下:

控制台中使用彩色高亮展示日志信息

mysql中效果如下

log文件效果如下

这里的异常信息只是简单的一句话,在实际开发中我们可以把很多内容添加到异常相关信息中,如下是一个.Net WebApi的异常日志的显示效果:

过滤器代码如下

///

///异常处理过滤器///

public classErrorHandleAttribute : ExceptionFilterAttribute

{///

///异常处理过滤器///

///

public override voidOnException(HttpActionExecutedContext actionExecutedContext)

{//获取客户端Ip

string clientIP = GetHostAddress();//主机Ip//获取httpmethod

string strHttpMethod =actionExecutedContext.Request.Method.ToString();//请求的url

string url =actionExecutedContext.Request.RequestUri.AbsoluteUri;//异常信息

string exceptionMsg =actionExecutedContext.Exception.Message;//异常定位

string exceptionPosition = actionExecutedContext.Exception.StackTrace.Split(new string[] { "" }, StringSplitOptions.None).Where(s => !string.IsNullOrWhiteSpace(s)).First().Trim();//string stack//记录的message

string message = $"----1.[客户端Ip]:{ clientIP}" + Environment.NewLine + $"----2.[请求方法]:{ strHttpMethod}" + Environment.NewLine + $"----3.[请求url]:{ url }" + Environment.NewLine + $"----4.[异常信息]:{exceptionMsg}" + Environment.NewLine + $"----5.[异常定位]:{exceptionPosition}";//Log4net记录

LogHelper.WriteErrorLog("", message);//nlog记录

NlogHelper.WriteErrorLog(message);

actionExecutedContext.Response=actionExecutedContext.Request.CreateResponse(

HttpStatusCode.InternalServerError,new { msg = "服务器忙,请稍后再试!"});

}///

///获取客户端IP地址(无视代理)///

/// 若失败则返回回送地址

public static stringGetHostAddress()

{string userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];if (string.IsNullOrEmpty(userHostAddress))

{if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)

userHostAddress= HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim();if (string.IsNullOrEmpty(userHostAddress))

{

userHostAddress=HttpContext.Current.Request.UserHostAddress;

}

}//最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)

if (!string.IsNullOrEmpty(userHostAddress) &&IsIP(userHostAddress))

{returnuserHostAddress;

}return "127.0.0.1";

}///

///检查IP地址格式///

///

///

public static bool IsIP(stringip)

{return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)$");

}

}

View Code

4.layout参数列表

${appdomain}

当前应用程序域

${assembly-version}

应用程序

${basedir}

应用程序域的基本目录。

${callsite}

(类名称、方法名称和相关信息的源信息)。

${counter}

数值

${date}

当前日期和时间。

${environment}

环境变量

${exception}

exception信息

${guid}

GUID

${identity}

线程标识信息

${level}

级别。

${log4jxmlevent}

XML事件描述

${logger}

记录器的名字

${longdate}

日期和时间的格式分类yyyy-MM-dd HH:mm:ss.ffff。

${machinename}

名称

${message}

消息

${newline}

文字换行

${processid}

当前进程标识符

${processinfo}

运行信息

${processname}

当前进程的名称。

${processtime}

该时间过程中格式HH:MM:ss.mmm。

${shortdate}

短时间 格式YYYY-MM-DD。

${threadid}

当前线程的标识符。

${threadname}

当前线程。

${ticks}

当前日期和时间。

${time}

24小时格式HH:MM:ss.mmm。

${var}

{$var}-提供新的变量(4.1)

补充:下边是一个分级别记录的Nlog.Config,这个配置文件和上边的LogHelper可以一起使用。

View Code

参考文献:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样在体制内培养出离开体制的能力

你要有随时可以离开而且离开以后比现在过得更好的能力。 这句看似励志的废话,正如告诉一个穷人,你要有随时能够赚钱而且保持财富自由的能力。 这谈何容易呢? 不下到游泳池里怎么能学会游泳。 不离开体制,你离开体制的能力从何培养…

Java 8:开发人员怎么看?

由于Java 8发行倒计时已经开始,因此Java开发人员似乎肯定已经准备好参与其中。 根据Typesafe的一项调查 ,参与其中的开发人员中有65%回答说他们将在24个月的计划中迁移到Java 8,而从中有30%的开发者将在接下来的6个月中…

比较好的一些 ConcurrentHashMap讲解博客

jdk8 https://blog.csdn.net/jianghuxiaojin/article/details/52006118#commentBox jdk7、8 https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/ jdk7 http://www.yuanrengu.com/index.php/2017-01-17.html 转载于:https://www.cnblogs.com/Draymonder/p/105…

20款漂亮的长阴影 LOGO 设计作品【附免费生成工具】

长阴影(Long Shadow)概念来自于最新非常流行的扁平化设计(Flat Design)。扁平化设计趋势影响最大的是用户界面元素和图标,但它也开始蔓延到其他网页设计的其他部分。 长阴影其实就是扩展了对象的投影,感觉是…

c语言sqlist结构体,c语言里 sqlist

满意答案cielkong2018.08.12采纳率:43% 等级:9已帮助:463人c语言里 sqlist?//定义顺序表L的结构体typedef struct{Elemtype data[MaxSize];int length;}SqList;//建立顺序表void CreateList(SqList * &L,ElemTy…

汇编语言实验三

1. 练习1 第1步,编写汇编源程序t1.asm, 源程序代码如图1-1所示。 (1) 运行程序,观察程序输出结果是什么? 2) 将 line4和line9种寄存器dl 的值分别修改为 0~9 中任何一个数字,重新汇编→ 连接→运行,观察结果的变化。 …

android dp转px的公式_公式px到dp,dp到px android

注意:上面广泛使用的解决方案基于displayMetrics.density。但是,文档解释说这个值是一个舍入值,与屏幕“桶”一起使用。例如。在我的Nexus 10上,它返回2,其中实际值为298dpi(实际)/ 160dpi(默认值) 1.8625。根据您的要…

Java事实让您大吃一惊! (信息图)

随着Java 8计划在未来几天内发布 ,我们正在寻找一些Java事实,这些事实将真正捕捉这种编程语言对世界的影响。 因此,我们决定创建一个简单的图表,描述有关Java历史的一些重要统计数据。 信息的主要来源是Oracle的Java时间轴 。 我…

多线程爬取新闻标题和链接

新闻分页地址:https://news.cnblogs.com/n/page/10/;url中最后一个数字代表页码 from concurrent.futures import ThreadPoolExecutor import threading import time from queue import Queue import logging import requests from bs4 import Beautiful…

15个创意示例教您如何自定义 404 错误页面

在这篇文章中,你会看到一组充满创意的404错误页面设计。我希望这个集合能够启发和帮助你设计自己的 404 错误页面。一个自定义的404错误页面将鼓励用户在您的网站上停留更长的时间。 404页面必须让访客容易理解,最好有有一些互动。你会看到下面的例子中一…

C语言反序输出英文句子,C++实现英文句子中的单词逆序输出的方法

本文实例讲述了C实现英文句子中的单词逆序输出的方法。分享给大家供大家参考,具体如下:#include "stdafx.h"#include #include #include using namespace std;int main(int arc,char** argv){string str"I come from liaoning.";sta…

r语言转化为python_数值型与字符型转换总结|R语言

在日常碰到问题时出现当前“数据类型不能进行操作”的提示时还是有些脑壳疼,所以这次整理了针对R数据类型转换的总结。理论部分主要是R for Data Science的向量节选翻译、《R语言实战》第二章2.2创建数据结构、《R in a Nutshell》以及猴子老师的向量ppt。————文…

input 输入值的监听 禁止输入特殊字符

1.input 输入值的监听 //用于监听input的值变化(input的值产生变化才会触发事件)(function ($) {$.fn.watch function (callback) {return this.each(function () {//缓存以前的值 $.data(this, originVal, $(this).val());//event $(this).on(keyu…

android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)

前言在Android开发中,多线程的使用十分常见今天,我将全面解析多线程其中一种常见用法:继承Thread类。目录示意图1. 简介示意图2. 使用讲解2.1 使用步骤示意图2.2 具体使用// 步骤1:创建线程类 (继承自Thread类)class MyThread ext…

适用于Apache Hadoop 2.0 M5的Spring

Spring高兴地宣布了Spring for Apache Hadoop 2.0 M5里程碑版本,同时它们也越来越接近候选版本。 在Spring博客中 ,新版本2.0与1.0版本之间有很好的比较。 根据它: 用于Apache Hadoop的Spring 1.0版本将HDFS和MapReduce与MapReduce v1或MapR…

汇编语言 第三章小节

汇编语言第三章小结 概述: 此章节的总标题叫做 “寄存器(内存访问)”, 其教学目的是“从访问内存的角度继续学习几个寄存器“。那么,介绍了哪些寄存器呢。其一: 用来访问数据段的”DS寄存器“; 其二&#x…

激发你的灵感:16个精美视差效果网页设计作品

对于视差滚动(Parallax Scrolling),关注网页设计的朋友都不会陌生。在网页设计中,视差滚动是一种很特别的网页设计技术,通过让多层背景以不同的速度或者不同的方向移动形成 3D 运动效果,有很强的视觉冲击力…

Eclipse的Mockito模板

有时候,我想念树林里的树木-那是一段令人不安的长时间。 我最近才再次意识到这一点,在无数次中键入了一个更详细的模拟表达式。 有问题的语句是doAnswer(Answer)构造,使用涉及到的静态导入和泛型的东西进行编码总是很麻烦。 尽管我定期使用E…

【洛谷2801】教主的魔法(分块经典入门题)

点此看题面 大致题意: 给你一个序列,要你支持两种操作:第一种是区间加法,第二种是查询区间内大于等于\(x\)的数的个数。 考虑分块 这应该是一道比较经典的分块入门题吧。 首先,我们将序列分块。 对于修改操作&#xff…

cut和tr命令的联合使用

cut的-d选项只能是单个字符,而对于多个连续相同字符分隔的字段,单凭cut命令是达不到想要的效果的,特别是多个连续空格分隔时。 但借助tr -s的压缩重复字符功能,可以将多个连续空格压缩为一个空格,然后再交给cut处理就容…