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[] { "\r\n" }, 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]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");

}

}

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

参考文献:

nlog官方帮助_Nlog日志组件简介相关推荐

  1. nlog官方帮助_NLog简介

    安装NLog asp.net core需要使用另外一个教程 在VS里安装NLog.Config包,这个包会自动安装NLog 包和NLog.Schema包. NLog.Config包会在vs项目中自动生 ...

  2. nlog官方帮助_Nlog

    参考资料:ASP.NET 上传文件到共享文件夹 创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html 一.配置上传文件相关参数并读取 ...

  3. nlog官方帮助_NLog类库使用探索——详解配置

    https://www.cnblogs.com/fuchongjundream/p/3936431.html 1 配置文件的位置(Configuration file locations) 通过在启动 ...

  4. nlog官方帮助_NLog教程

    内容 安装NLog NLog可以在NuGet中下载. 如果仅仅安装 NLog.Config 包,会一并安装 NLog 和 NLog.Schema 两个包,这将使得启动配置和智能感知. 使用 GUI 或 ...

  5. nlog官方帮助_NLog使用方法

    一.软件网站:http://www.nlog-project.org/ 下载:http://sourceforge.net/project/showfiles.php?group_id=116456 ...

  6. nlog官方帮助_NLog使用说明

    NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码. NLog允许我们自定义从跟踪消息的来源(source)到记录跟踪信息的目标(target)的规则 ...

  7. KSO-netcore 中使用日志组件Nlog

    简介 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这 ...

  8. ASP.NET Core 2.0 配置NLog日志组件

    2019独角兽企业重金招聘Python工程师标准>>> 1).添加nlog.config配置文件 <?xml version="1.0" encoding= ...

  9. C#组件系列——又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了"规矩",今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往 ...

最新文章

  1. CPU主频越高越好吗
  2. oracle数据库源数据路径,oracle中用什么命令查找数据文件所在路径呢?
  3. Leetcode 168. Excel表列名称 解题思路及C++实现
  4. 如何用texstudio下载ctex_公众号素材库视频如何下载,用这种方法就可以哦
  5. 【VB.NET】VB.NET基本数据类型
  6. 把文化全交给HR,是管理者最大的过失
  7. java subset_Java中的TreeSet的subSet()方法 Java.util.TreeSet.subSet() - Break易站
  8. 【学习 Opencv】—— 访问摄像机和视频
  9. 记一次在广州看牙医经历
  10. python祝福,1024,用Python抽取你的专属祝福!
  11. 加仓减仓口诀_加仓减仓口诀
  12. 随机预言机模型与标准模型
  13. 软件工程——数据流图
  14. 各国家 MCC 和 MNC 列表2
  15. 错误解决:hive报错Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  16. 我在哥大读博的五年,万字总结
  17. 电脑双屏显示变单屏后部分程序无法在当前屏幕显示的问题
  18. 个人项目 小跟班——蓝牙小车控制(UI篇)
  19. 设备运行可执行文件报:not executable: 64-bit ELF file
  20. 记一次lpk劫持样本分析

热门文章

  1. 2006年度中国上市公司价值百强排名表前100强
  2. 平台之战:京东,拿什么来跟天猫拼?
  3. linux一键安装vpn,使用 Linux 自动化工具 AutoKey提高生产率
  4. STM32MP157 | 虚拟网卡设备驱动
  5. 【PR 基础】裁剪工具的简单使用
  6. 正则化的岭回归、套索回归以及弹性网络
  7. 几种常用的前端js框架
  8. 分巧克力 【蓝桥杯】
  9. 一场雨下的师生爱、兄弟情
  10. 教大家S40/java所有玩机技巧,喜欢请转载 加QQ657752021学习更多技术