龙空技术网

.Net Core下NLog日志框架使用入门

WHILETRUE 135

前言:

如今小伙伴们对“net core nlog”大约比较珍视,你们都想要分析一些“net core nlog”的相关知识。那么小编同时在网摘上收集了一些关于“net core nlog””的相关内容,希望你们能喜欢,同学们一起来了解一下吧!

NLog是适用于各种.net平台(包括.net standard)的灵活而免费的日志记录平台。通过NLog, 可以轻松地写入多个目标。(数据库、文件、控制台), 并动态更改日志记录配置。

NLog支持结构化和传统日志记录。

NLog的特点: 高性能、易于使用、易于扩展和灵活配置

1. 安装Nlog

在vs的NuGet包管理器中直接搜Nlog,然后安装Nlog(用于系统引用Nlog.dll)和Nlog.Config(用于系统自动生成NLog.config文件)。

引用Nlog的HuGet包管理器.png

2. 配置NLog.config (非常重要)

注意看Nlog.config文件上的注释说明 (‾◡◝)

<?xml version="1.0" encoding="utf-8" ?><nlog xmlns=";      xmlns:xsi=";      xsi:schemaLocation=" NLog.xsd"      autoReload="true"      throwExceptions="false"      throwConfigExceptions="true"      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">  <!--autoReload 自动重新加载-->  <!--throwExceptions 抛出异常-->  <!--throwConfigExceptions="true" NLog 在配置文件错误的情况下抛出异常-->  <!--在根节点(nlog)配置 internalLogLevel, internalLogFile,可以查看NLog输出日志时的内部信息,比如你配置文件有错误,很有帮助,不过项目发布后还是关闭比较好,以免影响效率;-->  <targets>    <!--target参数里有些是NLog内置参数,比如message,level,date,longdate,exception,stacktrace(消息,级别,日期,长日期,异常,堆栈跟踪)等,NLog在输出时会自动赋值;-->    <!--xsi:type="AsyncWrapper" 表示这条 target 将异步输出-->    <!--queueLimit="5000" 队列限制5000-->    <!--overflowAction="Discard" 这个不知道干啥的(⊙_⊙)?猜测是上面队列超过5000之后的就丢弃-->    <!--layout 设置每条日志的布局,可参考官方说明  -->    <!-- 1.将日志写入文件-->    <target name="Hello_File" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard">      <target xsi:type="File" fileName="${currentdir}/logs/Hello_${shortdate}_${processid}_${threadid}.log" layout="${date}_${processid}_${threadid} ${level:uppercase=true} ${event-context:item=Action} ${message} ${event-context:item=Amount} ${stacktrace}" />    </target>    <target name="Hi_File" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard">      <target xsi:type="File" fileName="${currentdir}/logs/Hi_${shortdate}_${processid}_${threadid}.log" layout="${date}_${processid}_${threadid} ${level:uppercase=true} ${event-context:item=Action} ${message} ${event-context:item=Amount} ${stacktrace}" />    </target>    <!-- 2.将日志消息写入Visual Studio输出-->    <target name="debugger" xsi:type="Debugger" layout="NLog: ${date:format=yyyy-MM-dd HH\:mm\:ss} | ${level:uppercase=true:padding=-5} | ${message}" />    <!-- 3.将日志消息写入控制台输出-->    <target name="console" xsi:type="Console" layout="NLog: ${date:format=yyyy-MM-dd HH\:mm\:ss} | ${level:uppercase=true:padding=-5} | ${message}"/>  </targets>  <rules>    <!--在rules节点,指定四个target输出日志的级别-->    <!--TRACE,DEBUG,INFO,WARN,ERROR,FATAL /(小级别) 跟踪、调试、信息、警告、错误、致命 (大级别) -->    <!--name - 日志源/记录者的名字 (允许使用通配符*) C#调用的时候 LogManager.GetLogger("这里就是name值")        minlevel - 该规则所匹配日志范围的最小级别        maxlevel - 该规则所匹配日志范围的最大级别        level - 该规则所匹配的单一日志级别        levels - 该规则所匹配的一系列日志级别,由逗号分隔。        writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。        final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。-->    <logger name="Hello_Nlog" minlevel="Info" writeTo="Hello_File" />    <logger name="Hi_Nlog" minlevel="Info" writeTo="Hi_File" />    <logger name="*" minlevel="Trace" writeTo="debugger,console" />  </rules></nlog>
3. 调用Nlog

个人觉得多用 LogManager.GetLogger() 这个方法吧

// 1.GetCurrentClassLogger 获取具有当前类名称的日志记录器。// 这是一种运行缓慢的方法。确保你不是在循环中做这个。private static Logger logger = LogManager.GetCurrentClassLogger();logger.Fatal("2333--Fatal致命");logger.Error("2333--Error错误");logger.Warn("2333--Warn警告");logger.Info("2333--Info信息");// 2.GetLogger 获取指定的命名日志程序。private static Logger logHi = LogManager.GetLogger("Hi_Nlog");logHi.Debug("Hi Nlog--Fatal致命");logHi.Fatal("Hi Nlog--Fatal致命");logHi.Error("Hi Nlog--Error错误");logHi.Warn("Hi Nlog--Warn警告");logHi.Info("Hi Nlog--Info信息");private static Logger logHello = LogManager.GetLogger("Hello_Nlog");logHello.Info("Hello Nlog--Info信息");
第三方查看工具

和log4net一样,NLog也是被一些第三方log查看工具所支持的,我这里就搜索到了两个:Sentinel和 Harvester 。我用这些查看工具的地方不太多,没有具体去研究它们。不过NLog是支持DB输出的,感觉输出到DB中后用SQL查询要更加方便而强大些,就是实时性差些。

学习资料:

本文这里只是方便NLOG快速入门,仍属于管中窥豹阶段,NLOG本身还是非常强大的,有这方面需求的朋友可以看看:

标签: #net core nlog