首页 > 其他分享 >NLog条件配置——实现将包含某个特定字符串日志写入指定文件

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

时间:2024-02-27 11:24:49浏览次数:30  
标签:LogLevel 写入 NLog 内存 new 日志 config

需求产生缘由

在开发中为了了解程序在运行的内存状态并记录下来,以便出问题时判断是不是与内存相关。于是实时采集了开发程序需要的内存信息。但采集的内存信息在存储时,以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;

 

标签:LogLevel,写入,NLog,内存,new,日志,config
From: https://www.cnblogs.com/chengcanghai/p/18036487

相关文章

  • 在K8S中,如何查看Pod中某个容器日志?
    在Kubernetes(K8s)中,若要查看Pod中某个容器的日志,可以使用kubectllogs命令,并通过-c或--container参数指定容器名称。以下是命令格式:kubectllogs<pod_name>-c<container_name>这里的<pod_name>是你想要查看日志的Pod名称,而<container_name>则是你具体想要......
  • 日志解析对照表整理
         ......
  • ELKF日志系统搭建(二)进阶——使用 Kafka 作为日志消息缓存
    说明:在一些比较大的业务使用场景中,因为应用繁多,需要收集的日志也很多,通过filebeat或者logstash收集上来的日志如果全都直接发送给ES,那么就会对ES集群产生一定的压力,为了避免出现日志接收不过来的问题,于是引入了消息队列作为缓存,比如常见的使用Redis或Kafka作为消息缓存......
  • pd.ExcelWriter 实现数据写入不同sheet
    pd.ExcelWriter将数据写入不同sheet当结合for循环使用时,需注意放在for循环前面以下写法,仅生成一个sheet,原因在于pd.ExcelWriter的mode默认是w,每次for循环写入数据都会对原有的数据进行覆盖,最终只会生成一个sheet。importpandasaspddf1=pd.DataFrame([["AAA","BBB"]],......
  • 简化 Python 日志管理:Loguru 入门指南
    简化Python日志管理:Loguru入门指南在开发和维护软件项目时,高效的日志管理系统对于监控应用程序的行为、调试代码和追踪异常至关重要。Python的标准日志模块虽然功能强大,但其配置和使用往往较为复杂,尤其是对于新手开发者。这就是Loguru库发挥作用的地方,它以极简的方式重新定......
  • iexcel-excel 读取和写入,解决 excel OOM 问题
    项目简介IExcel用于优雅地读取和写入excel。避免大excel出现oom,简约而不简单。特性一行代码搞定一切OO的方式操作excel,编程更加方便优雅。sax模式读取,SXSS模式写入。避免excel大文件OOM。基于注解,编程更加灵活。设计简单,注释完整。方便大家学习改造......
  • Slave被误写入数据如何恢复到主库
    背景在GreatSQL主从复制环境中,有时候可能会出现一些误操作,将本应该写入到主库的数据写入到了从库,导致主从数据不一致,影响数据同步。是否可以将写入从库的数据同步写入主库呢?测试环境角色IP地址数据库开放端口版本主库192.168.137.1793308GreatSQL8.0.32从库......
  • 浮木云学习日志(7)---弹性容器&布局容器
    自从发现浮木云这个宝藏级别的原型设计平台,我简直对它爱不释手,因为他能让我在短时间内快速搭建一个原型页面,这对于产品的初学者无疑是一个福音。之前针对浮木云搭建的页面做了一些简单的记录,但是在页面设计过程中涉及的一些更加细致化的东西还需要深入去研究,接下来我将针对组件库......
  • kettle从入门到精通 第四十七课 ETL之kettle mongo output 写入
    1、上一节课我们学习了mongoinput读取步骤,本节课我们一起学习下mongoout写入步骤,该步骤可以将数据写入到mongo中,如下图所示。 2、 配置mongo连接,有两种方式,如截图所示。ConnectionString:如StringconnectionString="mongodb://username:password@localhost:27017/myda......
  • 最长不下降子序列nlogn做法及其拓展
    最长不下降子序列nlogn做法及其扩展前言&nlogn做法LIS表示最长不下降子序列考虑设\(f_i\)表示LIS长度为i的最小值(具有单调性),对于每个新的x,二分出最大的满足\(f_i\)小于等于x的位置w,更新w+1还有一种单调栈理解法,假若已经维护了一个LIS在单调栈里,对于一个新的x,二分出最大的满足......