netcore学习路径,Core下NLog日志框架使用入门
netcore学习路径,Core下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" t
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="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"
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 设置每条日志的布局 可参考官方说明 https://nlog-project.org/config/?tab=layout-renderers -->
<!-- 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本身还是非常强大的,有这方面需求的朋友可以看看:
http://www.cnblogs.com/dflying/category/78087.html