当前位置: 首页 > news >正文

NLog条件配置——实现将包含某个特定字符串日志写入指定文件

需求产生缘由

在开发中为了了解程序在运行的内存状态并记录下来,以便出问题时判断是不是与内存相关。于是实时采集了开发程序需要的内存信息。但采集的内存信息在存储时,以NLog中的Trace级别来存储的话,会与程序其它Trace级别的日志都记录在相同的Trace Log文件下,这会导致在查看内存日志时还需要将非内存日志去除,才能将所有的内存日志方便地显示出来。

解决方法——NLog XML配置

代码如下,主要就是添加过滤条件filters,要实现的是含有MemoryLog的要写入Memory文件中,于是判断日志字符串中是否有MemoryLog.

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><targets><target name="logfile" xsi:type="File" fileName="file.txt" /><target name="logconsole" xsi:type="Console" /><target name="memory" xsi:type="File" fileName="${basedir}/Memory.log"   layout="${longdate} ${level} ${message} ${exception} ${newline}" /></targets><rules><logger name="*" minlevel="Info" writeTo="logconsole" /><logger name="*" minlevel="Debug" writeTo="logfile" /><logger name="*" minlevel="Trace" writeTo="memory" ><filters defaultAction="Ignore"><when condition="contains('${message}', 'MemoryLog')"  action="Log" /></filters></logger></rules>
</nlog>

注意:filters的defaultAction设置成Ignore(忽略),否则会将其它日志记录到Memory文件中;另外xml配置时插入的xml文件文件名应该为NLog.config,同时要将此文件的 复制到输出目录 设置为 如果较新则复制/始终复制。

参考链接:

When Filter · NLog/NLog Wiki · GitHub

Filtering log messages · NLog/NLog Wiki · GitHub

解决方法——C#代码

本质就是将上述xml转化为C#代码 ,为了方便以后查阅,特记录如下:

        var config = new NLog.Config.LoggingConfiguration();//设定log文件var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "file.txt" };//设定log控制台var logconsole = new NLog.Targets.ConsoleTarget("logconsole");//设定MemoryLog文件var memory = new NLog.Targets.FileTarget("memory") { FileName = "${basedir}/Memory.log", Layout = "${longdate} ${level} ${message} ${exception} ${newline}" };config.AddRule(NLog.LogLevel.Info, NLog.LogLevel.Fatal, logconsole);config.AddRule(NLog.LogLevel.Debug, NLog.LogLevel.Fatal, logfile);//为memory设定过滤条件var rule = new NLog.Config.LoggingRule("*", NLog.LogLevel.Trace, memory);rule.Filters.Add(new NLog.Filters.ConditionBasedFilter{Condition = "contains('${message}', 'MemoryLog')",Action = NLog.Filters.FilterResult.Log});config.LoggingRules.Add(rule);NLog.LogManager.Configuration = config;

相关文章:

  • 蓝桥杯备战刷题three(自用)
  • MapStruct 教程
  • 【Java面试题】SpringBoot与Spring的区别
  • Programming Abstractions in C阅读笔记:p308-p311
  • 暗九之凶险,更甚于明九
  • K8S部署postgresql
  • Node.js_基础知识(CommonJS模块化)
  • Hololens 2应用开发系列(1)——使用MRTK在Unity中设置混合现实场景并进行程序模拟
  • 23端口登录的Telnet命令+传输协议FTP命令
  • Django 表单
  • 【Git】深入理解 Git 分支合并操作:git merge dev 命令详解
  • 2024年,智慧文旅领航新时代,重塑旅行体验的未来篇章!
  • oppo手机备忘录记录怎么转移到华为手机?
  • wordpress 开源主题
  • Linux 开发工具vim、gcc/g++、makefile
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • CentOS6 编译安装 redis-3.2.3
  • HTTP那些事
  • HTTP--网络协议分层,http历史(二)
  • js写一个简单的选项卡
  • Linux中的硬链接与软链接
  • MD5加密原理解析及OC版原理实现
  • Spring声明式事务管理之一:五大属性分析
  • Tornado学习笔记(1)
  • 算法-插入排序
  • ​Java并发新构件之Exchanger
  • ​比特币大跌的 2 个原因
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (原)Matlab的svmtrain和svmclassify
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • /var/spool/postfix/maildrop 下有大量文件
  • @RunWith注解作用
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [@Controller]4 详解@ModelAttribute
  • [20160807][系统设计的三次迭代]
  • [BZOJ1008][HNOI2008]越狱
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [C进阶] 数据在内存中的存储——浮点型篇
  • [EFI]DELL XPS13 9360电脑 Hackintosh 黑苹果efi引导文件
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等
  • [LeetCode刷题笔记]1 - 两数之和(哈希表)
  • [one_demo_6]逆置整数
  • [Reprinted] 使用Spring Data Redis操作Redis(一) 很全面
  • [ruby on rails] array、jsonb字段
  • [SAP] ABAP注释快捷键修改
  • [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作...
  • [Spring Boot1]配置、视图、Web开发
  • [WinDBG 技巧] 列举所有Handle(句柄)以及查看Handle 信息
  • [代码] 类似 YYText 将表情文本转换成表情字符