一、NLog 简介

NLog是适用于各种.NET平台的灵活,免费的日志记录平台。NLog使写入多个目标变得容易 。(数据库,文件,控制台)并即时更改日志记录配置。(本文主要介绍写日志到文件中)

注:以下操作为 asp.net core web项目,编辑器为VS2019

二、NLog 安装

2.1 使用程序包管理控制台(Package Manager)

PM> Install-Package NLog

2.2 .Net CLI

dotnet add package NLog

在项目的根目录下,在cmd窗口中输入上面的命令即可安装。



三. NLog 配置

3.1 Nlog配置方式

  • 通过配置文件;
  • 通过程序代码;

3.2 通过配置文件配置Nlog

  • 在项目的根目录创建Nlog.config文件,并设置文件属性:

  • 具体配置

下面的配置,就是一个简单的配置Nlog.config的demo,将下面的配置复制到Nlog.config中,即可将日志写入到PsTest.log文件中。

<?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"> <targets>
<target name="file" xsi:type="File"
fileName="${basedir}\PsTest.log"
layout="${longdate} | ${level:uppercase=true}: ${message} | ${stacktrace}"
maxArchiveFiles="3"
archiveAboveSize="10240"
encoding="utf-8"/>
</targets> <rules>
<logger name="*" minlevel="Debug" writeTo="file"></logger>
</rules>
</nlog>

下面简单介绍下各配置项的意思:

targets 节点中定义了一系列日志输出目标,每一个输出目标是一个 target 元素。

target标签:

  • fileName 属性:指日志写入的文件的路径及文件名。${basedir}指应用的当前路径。
  • layout 属性:设置每条日志的输出内容及格式。${longdate} 指写入日志的时间,${level}指日志等级, ${stacktrace}指堆栈信息。
  • archiveAboveSize 属性:设置日志文件的大小的最大值,单位为byte,如果下条日志写入的话要超出这个值,就会新建个日志文件,继续写入。
  • maxArchiveFiles 属性:指该target的日志文件最多允许产生的个数,通常与archiveAboveSize 属性配合使用。

rules 节点是日志路由规则的集合,由一个或多个 logger 元素组成。每个 logger 元素记录了 logger 的名字、目标输出以及要处理的日志等级。

logger标签:

  • name 属性:设置命名空间和类,如果为*,代表针对所有程序集。
  • minlevel 属性:指只有当日志等级大于"Debug"时,才会写入。
  • writeTo 属性:指输出目标,与target的name对应。

四、程序代码中写日志

public static void Main(string[] args)
{
var i = 100;
while (i > 1)
{
NlogTest();
i--;
}
}
public static void NlogTest()
{
//通过NLog.LogManager.GetCurrentClassLogger方法可以创建一个与所在类同名(包括 namespace)的 NLog.Logger 的实例。
var logger = LogManager.GetCurrentClassLogger();
logger.Error("something Error!");
logger.Info("something Info!");
logger.Debug("something Debug!");
try
{
List<int> ls = null;
var c = ls.Count;
}
catch (Exception ex)
{
logger.Error(ex.Message);
}
}

来到应用的生成目录下面即可看到PsTest.log日志文件。



可以看到生成了多个log文件,因为配置文件设置的log文件最大为10k。

打开PsTest.0.log文件:



日志已经按照配置的格式写入到文件中!


但这样写有个问题,就是每次写日志都要先创建一个NLog.Logger 的实例,这样的话,如果程序集较多,就造成了代码冗余,所以,还是封装一个Nlog的帮助类比较好,每次都调用这个类去写日志

  • 封装的nlog帮助类:
	public class PsLog
{
public static void Error(Exception ex)
{
Exception iex = GetInnerException(ex);
Error(iex.ToString());
} public static void Error(string msg)
{
WriteLog(msg, LogLevel.Error);
} private static void WriteLog(string msg, LogLevel level)
{
try
{
if (LogLevel.Debug == level)
{
LogManager.GetCurrentClassLogger().Debug(msg);
}
else if (LogLevel.Error == level)
{
LogManager.GetCurrentClassLogger().Error(msg);
}
else if (LogLevel.Fatal == level)
{
LogManager.GetCurrentClassLogger().Fatal(msg);
}
else if (LogLevel.Info == level)
{
LogManager.GetCurrentClassLogger().Info(msg);
}
else if (LogLevel.Trace == level)
{
LogManager.GetCurrentClassLogger().Trace(msg);
}
else if (LogLevel.Warn == level)
{
LogManager.GetCurrentClassLogger().Warn(msg);
}
else
{
LogManager.GetCurrentClassLogger().Info(msg);
}
}
catch (System.Exception e)
{
try
{
string strPath = Directory.GetCurrentDirectory();
using (FileStream fs = File.Open(strPath + @"\fatal.txt", FileMode.OpenOrCreate))
using (StreamWriter sw = new StreamWriter(fs))
sw.WriteLine(DateTime.Now.ToString() + ": Can not write the nlog, " + e.Message);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
} public static void Info(string msg)
{
WriteLog(msg, LogLevel.Info);
} private static Exception GetInnerException(Exception ex)
{
if (ex.InnerException == null)
{
return ex;
}
return GetInnerException(ex.InnerException);
}
}
  • 调用帮助类:
   public static void NlogTest()
{
PsLog.Error("something Error!");
PsLog.Info("something Info!");
PsLog.Debug("something Debug!");
try
{
List<int> ls = null;
var c = ls.Count;
}
catch (Exception ex)
{
PsLog.Error(ex);
}
}

五、参考


.Net快速上手Nlog日志组件的更多相关文章

  1. Nlog日志组件简介

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

  2. asp.net core 3 使用nlog日志组件,使用$ {basedir}保存位置不对,记录下怎么解决

    $ {basedir}指向的是  AppDomain.CurrentDomain.BaseDirectory, Asp.Net.Core的解决方法可能如下(在Program.cs中添加两行): var ...

  3. .Netcore之日志组件Log4net、Nlog性能比较

    转载请注明出处http://www.cnblogs.com/supernebula/p/7506993.html .Netcore之Log4net.Nlog性能比较 最近在写一个开源.netcore ...

  4. 【框架学习与探究之日志组件--Log4Net与NLog】

    前言 本文欢迎转载,作者原创地址:http://www.cnblogs.com/DjlNet/p/7604340.html 序 近日,天气渐冷,懒惰的脑虫又开始作祟了,导致近日内功修炼迟迟未能进步,依 ...

  5. ABP .Net Core 日志组件集成使用NLog

    一.说明 NLog介绍和使用说明官网:http://nlog-project.org/ NLog和Log4net对比:https://www.cnblogs.com/qinjin/p/5134982. ...

  6. net core体系-web应用程序-4net core2.0大白话带你入门-7asp.net core日志组件(Logger和Nlog)

    asp.net core日志组件   日志介绍 Logging的使用 1. appsettings.json中Logging的介绍 Logging的配置信息是保存在appsettings.json配置 ...

  7. React:快速上手(2)——组件通信

    React:快速上手(2)——组件通信 向父组件传递数据 父组件可以通过设置子组件的props属性进行向子组件传值,同时也可以传递一个回调函数,来获取到子组件内部的数据. 效果演示 子组件是输入框,父 ...

  8. .Net core2.0日志组件Log4net、Nlog简单性能测试

    .Net core之Log4net.Nlog简单性能测试 比较log4net.nlog的文件写入性能(.netcore环境),涉及代码和配置如有不正确的地方,还请批评指正. 原创,转载请著名出处:ht ...

  9. 快速入门系列--Log4net日志组件

    Log4net是阿帕奇基金会的非常流行的开源日志组件,是log4j的.NET移植版本,至今已经有11年的历史,使用方便并且非常稳定,此外很重要的一点是其和很多开源组件能很好的组合在一起工作,例如NHi ...

随机推荐

  1. CAD安装失败怎样卸载重新安装CAD,解决CAD安装失败的方法总结

    技术帖:CAD没有按照正确方式卸载,导致CAD安装失败.楼主也查过网上关于如何解决CAD安装失败的一些文章,是说删除几个CAD文件和CAD软件注册表就可以解决CAD安装失败的问题,实际的情况并没有这么 ...

  2. java 删除字符串左边空格和右边空格 trimLeft trimRight

    /** * 去右空格 * @param str * @return */ public String trimRight(String str) { if (str == null || str.eq ...

  3. vbox环境搭建oracle11g RAC过程

    安装环境 主机操作系统:windows 10 虚拟机Vbox:两台Oracle Linux R6 U7 x86_64 Oracle Database software: Oracle11gR2 Clu ...

  4. Java8 Date与LocalDate互转

    Java8 日期时间API,新增了LocalDate.LocalDateTime.LocalTime等线程安全类,接下来要说的是LocalDate与java.util.Date之间的转换. 1.Loc ...

  5. JDK8中`Optional.orElse()` 和`Optional.orElseGet()`之间的区别

    看例子就明白了 ``` static String B() { System.out.println("B()..."); return "B"; } publ ...

  6. 学习meta标签http-equiv属性

    meta标签http-equiv属性的使用:meta标签http-equiv属性的使用

  7. day6_python之configparser_模块

    configparser_模块是为了解析.ini文件的配置 a.ini [xiechao] name=xiechao age=18 is_admin=True salary=1000000.12 [x ...

  8. Java 内存模型及GC原理 (转)

      来源:http://blog.csdn.net/ithomer/article/details/6252552 一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性 ...

  9. Android Studio(六):Android Studio添加注释模板

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  10. python不得不知的几个开源项目

    1.Trac Trac拥有强大的bug管理 功能,并集成了Wiki 用于文档管理.它还支持代码管理工具Subversion ,这样可以在 bug管理和Wiki中方便地参考程序源代码. Trac有着比较 ...