『NLog』.Net使用NLog使用方式及详细配置(输出至文件/RabbitMQ/远程网络Tcp)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 📣读完这篇文章里你能收获到- Nlog输出至文件/RabbitMQ/远程网络Tcp配置文档- Nlog配置参数详解- .NET CORE项目接入

请添加图片描述
📣读完这篇文章里你能收获到

  • Nlog输出至文件/RabbitMQ/远程网络Tcp配置文档
  • Nlog配置参数详解
  • .NET CORE项目接入
  • 感谢点赞+收藏,避免下次找不到~

请添加图片描述

一、概念篇

1 NLog介绍

NLog是一个简单灵活的.NET日志记录类库,NLog的API非常类似于log4net,且配置方式非常简单。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的调试信息,根据项目需求配置署出格式和输出目标的规则。

NLog使用路由进行配置,但log4net却使用层次性的appender配置,这样就让NLog的配置文件非常容易阅读,并便于今后维护。

支持多种形式输出日志:文本文件 系统日志 数据库 控制台 邮箱 等

2 配置文件参数

  • targets和rules
<targets /> - 定义日志的目标/输出,下级是<target>
<rules /> - 定义日志的路由规则,下级是<logger>

  • nlog标签
  1. autoReload 修改配置文件后是否允许自动加载无须重启程序
  2. throwExceptions 内部日志系统抛出异常
  3. internalLogLevel 可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭
  4. internalLogFile 把内部的调试和异常信息都写入指定文件里
  5. 建议throwExceptions的值设为false,这样由于日志引发的问题不至于导致应用程序的崩溃

  • targets标签
<target />区域定义了日志的目标或者说输出 ,在这里可以按需设置文件名称和格式,输出方式
  1. name:自定义该target的名字,可供rule规则里使用
  2. type: 定义类型,官方提供的可选类型有:

Chainsaw|ColoredConsole |Console |Database|Debug|Debugger|EventLog|File|LogReceiverService|Mail|Memory|MethodCall|Network |NLogViewer|Null |OutputDebugString|PerfCounter|Trace|WebService


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

  • rules标签
各种规则配置在logger子标签里

name - 记录者的名字

minlevel - 最低级别

maxlevel - 最高级别

level - 单一日志级别

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

writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔

  • variable标签
变量定义
 <variable name="variable1" value="${basedir}/logs"/> 
 <targets>   
    <target name="File" xsi:type="File" fileName="${variable1}/${shortdate}.txt"/>  
 </targets>

请添加图片描述

二、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">
  <!--<variable name="logDirectory" value="E:/Log"/>-->
  <!--按照小时记录-->
  <targets>
    <!--此部分中的所有目标将自动异步-->
    <default-wrapper xsi:type="AsyncWrapper"></default-wrapper>
    <!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
    <target xsi:type="File"
            name="info"
            fileName="${basedir}/info/${date:format=yyyy-MM-dd-HH}.txt"
            layout ="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"/>
    <target xsi:type="File"
           name="error"
           fileName="${basedir}/error/${date:format=yyyy-MM-dd-HH}.txt"
           layout ="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"/>
    <!--网络发送
        <target name="logstash" xsi:type="Network" address="tcp://127.0.0.1:9900" keepConnection="false"
         layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"/>-->

    <!--发送到RabbitMQ-->
    <!--<extensions>
      <add assembly="Nlog.RabbitMQ.Target" />
    </extensions>
    <targets async="true">
      <target name="RabbitMQTarget"
          xsi:type="RabbitMQ"
         username="guest"
                 password="guest"
                 hostname="localhost"
         port="5672"
                 vhost="/"
         appid="NLog.RabbitMQ.TuDou"
         topic="TuDou.Logging.${level}"
          exchange="aggregateservice-log"
                  exchangeType="topic"
          useJSON="true"
          layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    </targets>-->
    <!-- ElasticSearch发送
    <target name="elastic" xsi:type="BufferingWrapper" flushTimeout="5000">
      <target xsi:type="ElasticSearch" includeAllProperties="true" index="logstash-20200805"  uri="http://localhost:9200" />
    </target>   -->
    
  </targets>

  <rules>
    <logger name="*" level="Info" writeTo="info" />
    <logger name="*" level="Error" writeTo="error" />
    <!--<logger name="*" level="Info,Error" writeTo="RabbitMQTarget" />-->
  </rules>
</nlog>

在这里插入图片描述
请添加图片描述

三、.NET Core调用方法

1 Nuget依赖包下载

Nlog Nlog Configuration
  • 在nuget程序包管理界面上,搜索安装Nlog 和Nlog configuration,这样会自动生成一个config文件,这样和程序或者web自己的config区分开方便日后使用管理,互不影响

img
如果通过RabbitMQ,则需要引入Nlog.RabbitMQ.Target
在这里插入图片描述

2 代码引入

Program中引入:
在这里插入图片描述

调用时注入:
在这里插入图片描述
请添加图片描述

四、附录

附录:layouts 属性

${activityid} 将其置入日志System.Diagnostics trace
${all-event-properties} 事件日志上下文
${appdomain} 当前应用程序域
${assembly-version} 应用程序
${basedir} 应用程序域的基本目录。
${callsite} (类名称、方法名称和相关信息的源信息)。
${callsite-linenumber} 调用类的
${counter} 数值
${date} 当前日期和时间。
${document-uri} 用于Silverlight应用。
${environment} 环境变量
${event-properties}
${exception} exception信息
${file-contents} 显示指定文件的内容
${gc} 垃圾收集器
${gdc} 诊断上下文
${guid} GUID
${identity} 线程标识信息
${install-context} 安装参数
${level} 级别。
${literal}
${log4jxmlevent} XML事件描述
${logger} 记录器的名字
${longdate} 日期和时间的格式分类yyyy-MM-dd HH:mm:ss.ffff。
${machinename} 名称
${mdc} 映射诊断
${mdlc} 异步映射诊断上下文
${message} 消息
${ndc} 线程结构
${ndlc} 异步线程
${newline} 文字换行
${nlogdir} nlog.dll目录。
${performancecounter} 述性能计数器。
${processid} 当前进程标识符
${processinfo} 运行信息
${processname} 当前进程的名称。
${processtime} 该时间过程中格式HH:MM:ss.mmm。
${qpc} 高精度定时器,基于返回的值从queryperformancecounter(任选地)转换为秒。
${registry} 从注册表中的值。
${sequenceid} ID
${shortdate} 短时间 格式YYYY-MM-DD。
${sl-appinfo} Silverlight应用。
${specialfolder} 文件夹路径
${stacktrace} - 堆栈跟踪渲染器。
${tempdir} 临时目录中。
${threadid} 当前线程的标识符。
${threadname} 当前线程。
${ticks} 当前日期和时间。
${time} 24小时格式HH:MM:ss.mmm。
${var} {$var}-提供新的变量(4.1)
${windows-identity} indows线程标识信息(用户名)

官方参考:
https://github.com/nlog/NLog/wiki/Layout%20Renderers
https://github.com/nlog/NLog/wiki/Targets
https://github.com/NLog/NLog/releases/
http://nlog-project.org/

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
26天前
|
安全 网络安全 数据安全/隐私保护
|
14天前
|
网络协议 Linux
图形界面配置网络
本文介绍了在Linux上配置网络服务的步骤。首先打开RHEL-01服务器,找到桌面网络配置选项,进入网络配置面板。点击面板右下角的小齿轮,进入有线配置面板,选择IPv4选项,将地址设置为手动。接下来配置IP地址、子网掩码、网关和DNS服务器。配置完成后,使用新的IP地址进行访问。
29 4
图形界面配置网络
|
10天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
45 3
|
10天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
34 2
|
11天前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
|
22天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
49 13
|
13天前
|
网络虚拟化 数据安全/隐私保护 数据中心
对比了思科和华为网络设备的基本配置、接口配置、VLAN配置、路由配置、访问控制列表配置及其他重要命令
本文对比了思科和华为网络设备的基本配置、接口配置、VLAN配置、路由配置、访问控制列表配置及其他重要命令,帮助网络工程师更好地理解和使用这两个品牌的产品。通过详细对比,展示了两者的相似之处和差异,强调了持续学习的重要性。
27 2
|
14天前
|
网络协议 Linux
通用网卡配置文件配置网络
本文介绍了在RHEL 7系统中配置网络的方法。首先,通过编辑位于`/etc/sysconfig/network-scripts`目录下的网卡配置文件(例如`ifcfg-ens33`),设置静态IP地址、子网掩码、网关和DNS等参数。接着,使用`systemctl`命令重启网络服务,确保配置生效。此外,还介绍了使用`nmtui`图形界面工具进行网络配置的步骤,包括修改IP地址、保存配置和重启网络。最后,通过`ip addr`或`ifconfig`命令验证配置是否成功。
46 2
|
22天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
11天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
下一篇
无影云桌面