NLog文章系列——如何编写自定义的过滤器(Filter)

ASP.NET Core 从入门到精通:系统学习路线与实战项目指南 依赖注入是现代Web开发框架的核心设计模式之一,它通过将服务对象的创建与使用解耦,提升了代码的可测试性和可维护性。其原理是借助一个容器来管理对象的生命周期,开发者只需声明依赖关系,由容器负责实例化与注入。这一技术价值在于促进了松耦合架构,是构建可扩展、易测试应用程序的基石。在ASP.NET Core中,依赖注入被内置为框架的“一等公民”,开箱即用,广泛应用于服务注册、中间件配置等场景。结合Entity Framework Core进行数据访问时,通过依赖注入DbContext,可以高效地实现数据持久化操作。 阅读详情

 

作者:Jarosław Kowalski <jaak@jkowalski.net>

翻译:CrazyCoder(由衷感谢他的热心!!)

原文:http://www.nlog-project.org/howto_write_filter.html

更多关于NLog的中文文章,请参考《NLog文章系列》。

 

为什么要编写自定义过滤器?

过滤器的作用就是减少向日志目标输出不需要的日志信息。NLog提供一些预定义的过滤器,这些过滤器支持大多数常用的字符串运算符。如果这些预定义的过滤器不符合你的需求,那就自己动手吧。

 

怎样编写?

写一个过滤器并不复杂。写一个继承了NLog.Filter的类并重写其中的Check()方法就可以了。Check()方法的返回值包括:

  1. FilterResult.Neutral – 该过滤器不想决定这个消息是否应被记录。其它的过滤器(如果有的话)可以进一步检查。
  2. FilterResult.Ignore – 这个消息不应该被记录。
  3. FilterResult.Log – 这个消息应该被记录。也不需要其它过滤器的进一步检查。

通常即使一个消息符合过滤条件,也应该让用户来决定这个消息是否应当被过滤。这种情况下如果符合过滤条件滤器都应当返回Result。如果过滤器要支持用户自定义配置那么应该返回Result或者FilterResult.Neutral。

 

例子

这个例子里介于两个特定时间之间记录的日志信息会被过滤。

csc.exe /t:library /out:MyAssembly.dll /r:NLog.dll MyFirstFilter.cs

 

using System; 
using System.Text; 
 
using NLog; 
 
namespace MyNamespace 
{ 
    [Filter("hourRange")] 
    public sealed class HourRangeFilter: Filter 
    { 
        private int _fromHour = 0; 
        private int _toHour = -1; 
         
        public int FromHour 
        { 
            get { return _fromHour; } 
            set { _fromHour = value; } 
             
        } 
        public int ToHour 
        { 
            get { return _toHour; } 
            set { _toHour = value; } 
             
        } 
 
        protected override FilterResult Check(LogEventInfo ev) 
        { 
            if (ev.TimeStamp.Hour >= FromHour && ev.TimeStamp.Hour <= ToHour) 
                return Result; 
            else 
                return FilterResult.Neutral; 
        } 
    } 
}

 

如何使用自定义过滤器

只要把自定义过滤器所在的动态链接库引用到配置文件的<extensions />区域即可,具体做法请参考这里。

 

配置文件的例子

这个配置文件设置过滤在10:00和12:59之间记录的日志。很简单吧。

<nlog> 
  <extensions> 
    <add assembly="MyAssembly"/> 
  </extensions> 
  <targets> 
    <target name="console" type="Console"/> 
  </targets> 
  <rules> 
    <logger name="*" minLevel="Info" appendTo="console"> 
      <filters> 
        <hourRange fromHour="10" toHour="12" action="Ignore"/> 
      </filters> 
    </logger> 
  </rules> 
</nlog> 
 

怎样将配置参数传递给过滤器

看一下上面的例子,“FromHour”和“ToHour”这个两个属性就是两个配置参数。只需在类中声明公有属性来保存配置参数就可以了。过滤器配置中的每一个参数都会被传递给正确的公有属性。NLog支持integer,string,datetime和boolean类型的参数并会对类型进行自动转换。参数都是大小写敏感的。

<filters> ... <hourRange fromHour="10" toHour="12" action="Ignore" /> ... </filters>

这里在配置过滤器的时候FromHour的值被设为10,ToHour的值被设为12。可以使用更多的参数来传递更多的属性:

<filters> ... <hourRange p1="" p2="" p3="" p4="" pN="" action="Ignore" /> ... </filters>

 

需要一个专门的动态链接库吗?

完全不必。可以调用FilterFactory.AddFilter()来通过程序注册过滤器。不过必须保证注册完成之前不能记录任何日志信息。在<extensions />区域参照EXE可执行文件是允许的。

static void Main(string[] args) 
{ 
    FilterFactory.AddFilter("MyFirst", typeof(MyNamespace.MyFirstFilter)); 
 
    // start logging here 
}

 

Last updated: 2006-07-10 11:32:55

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计 本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。 阅读详情

相关推荐

UG NX 12.0零基础实战:从草图绘制到三维建模全流程解析

本文详细解析UG NX 12.0从草图绘制到三维建模的全流程,适合零基础用户快速掌握这款工业设计软件。内容涵盖界面设置、基础操作、草图技巧、拉伸旋转建模、布尔运算等核心功能,并通过机械零件实战案例演示完整设计流程,帮助读者系统学习UG NX 12.0的工业设计应用。

weixin_29261711的博客 1177

.NET NLog 详解(四) - filter

我们将版本向前切换到20051025,这期的关注点是filter。我们在使用日志的时候可能希望加上一些过滤器,在满足某些特定条件的时候才输出。举个简单的使用方式如下: <nlog> <targets><target name='debug' type='Debug' layout='${basedir} ${message}' /></target...

weixin_30593443的博客 474

STM32与FreeRTOS:基于TIM6的高精度系统时间获取实践

本文详细介绍了在STM32与FreeRTOS环境下,基于TIM6定时器实现高精度系统时间获取的实践方法。通过复用FreeRTOS的TIM6硬件资源,开发者可以高效获取毫秒级和微秒级系统时间,同时解决时间溢出和中断处理等关键问题。文章还提供了CubeMX配置技巧、代码实现及性能优化建议,适用于嵌入式系统开发中的精确时间管理需求。

weixin_29169505的博客 359

Nlog详解---非常详细

Nlog详解

LongtengGensSupreme博客 1万+

半导体EAP系统入门指南:从零开始理解设备自动化程序(附实战案例)

本文深入浅出地介绍了半导体制造中EAP(设备自动化程序)系统的核心作用与工作原理。EAP作为连接MES与生产设备的桥梁,负责指令翻译、数据采集与实时控制,是实现晶圆厂全自动化的关键。文章通过对比手动与自动模式,阐述了EAP在提升效率、保障良率方面的价值,并提供了一个实战案例,帮助读者从零构建对半导体CIM体系中这一关键组件的理解。

weixin_29200741的博客 737

5G无人机安全研究综述

国内多所高校提出混合信任模型,南京航空航天大学于2020年提出了起源信息感知的无人机网络信任模型[26],模型基于报文的完整性对报文创建和操作节点的行为评判并生成观测证据,收集证据进行信任评估,识别网络中的恶意节点并进行路由隔离,实现准确的对等信任评估。同时,5G技术的高速率、高可靠性、低时延等特点,能够为无人机提供实时高清图像回传,保证通信网络的稳定,拓展无人机飞控距离限制,丰富了5G无人机的应用场景。5G和无人机技术的融合,丰富了传统无人机的应用服务场景,然而5G无人机仍存在安全隐患。

weixin_70923796的博客 766

Unity之如何实现TTS文本转语音(真人发音)

微软Azure TTS 文本转语音 服务 将文本转换为逼真的语音的语音服务功能 支持个各国语言,各种中文各种方言,支持不同音色男音女音 支持离线和在线版本

TxNet 5481

.Net6使用NLOG记录全局异常过滤器

2:在项⽬根⽬录下创⼀个为 nlog.config 的配置文件,加上这些内容。Program里面启用NLOG并且加载日志配置。(网上的内容很多,具体看自己需求)

2301_76867752的博客 1113

基于ESP32 蓝牙游戏手柄设计

介绍使用 ESP32 并通过 BLE 通信的 设计手持游戏手柄,包含原理图与代码

DT程序员的博客 2164

C# & SQL Server 实时数据同步:7步轻松搞定,代码详解

实时数据同步是指在一个数据库中的数据发生变化时,能够立即或近乎立即地将这些变化同步到另一个数据库中。这种同步可以是单向的(从源数据库同步到目标数据库),也可以是双向的(两个数据库互相同步)。通过本文的详细讲解和代码示例,相信你已经学会了如何使用C#和SQL Server实现数据库的实时数据同步。实时数据同步不仅可以提升系统的响应速度,还能确保数据的一致性和准确性。希望这篇教程对你有所帮助,期待你在C#编程中取得更大的成就!🌟✨如果你有任何问题或建议,欢迎在评论区留言交流!

java专栏 515

Net Core集成Exceptionless分布式日志功能以及全局异常过滤

# Net Core集成Exceptionless分布式日志功能以及全局异常过滤 相信很多朋友都看过我的上篇关于Exceptionless的简单入门教程asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 上篇文章只是简单的介绍了Exceptionless是什么?能做什么呢?以及怎么进行本地部署和...

weixin_34061042的博客 233

【AI黑话日日新】什么是AI云原生?

云原生赋能AI:利用容器、微服务、Serverless、DevOps等云原生技术,解决AI应用(尤其是大模型)在部署、扩展、运维、成本控制方面的痛点,让AI服务具备高可用、高性能、易运维、易扩展的特性AI赋能云原生:将AI技术(如智能调度、异常检测、自动优化)融入云基础设施管理,使云平台具备自我感知、自我优化、自我修复的能力,从"被动响应"升级为"主动适配"其本质是实现从""(AI运行在云上)到""(为AI量身打造的云)的根本性转变。

专注:太空算力、AI infra、异构调度、大模型成本工程 627

Winform/WPF实时日志面板搭建:从LogPanel控件到NLog接入

在桌面应用开发中,日志不仅是排障依据,更是观察程序运行时状态的重要窗口。文件日志虽能长期留存,却难以满足实时定位问题的需求。通过日志面板将日志输出到界面,利用Winform的RichTextBox或WPF的ListBox虚拟化技术,以队列加定时批量刷新的方式,既能保证高频日志下的UI流畅,又能按级别着色、自动滚动。结合NLog自定义Target,业务代码无需改动就能让所有日志同时进入面板和文件,尤其适合上位机调试、设备监控与内部管理系统。本文从控件封装到框架接入,梳理实时日志面板的完整实现与踩坑记录。

weixin_34116482的博客 316

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ABP VNext日志机制详解:Serilog结构化日志集成实践与避坑指南

在.NET后端开发中,日志记录是系统可观测性的基石。传统文本日志将信息渲染为字符串,导致后续检索、聚合和链路追踪极为困难。结构化日志则通过消息模板保留字段化数据,让日志从“文本”升级为“可查询的事件”。ABP VNext框架基于Microsoft.Extensions.Logging搭建了统一的日志抽象层,应用代码只需面向ILogger<T>编程,底层实现可随时替换。Serilog作为结构化日志的成熟方案,凭借丰富的Sink生态和与ABP VNext官方的深度集成,成为多数项目的首选。通过接入Serilog

weixin_30983353的博客 298

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ASP.NET MVC升级.NET 8全攻略:迁移路线与踩坑实录

在现代Web开发中,框架迭代与技术栈升级始终是团队关注的焦点。ASP.NET Core作为跨平台的高性能框架,正在全面替代基于System.Web的传统ASP.NET MVC。从.NET Framework迁移到.NET 8不仅是运行时切换,更是架构层面的重构,涉及依赖注入、中间件管道、EF Core数据访问等核心模块的调整。理解迁移原理与版本差异,掌握项目改造的关键步骤,能显著降低升级风险,提升系统性能与可维护性。本文以真实项目迁移经验为背景,系统梳理了从评估策略、环境准备、核心代码替换到上线验证的完整路

weixin_31421613的博客 205

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NLOG的使用

c# NLOG使用随记

nixoncheng的博客 1116

NLog开源框架说明

NLog开源框架说明 NLog是一个简单灵活的.NET日志记录类库。支持的平台也相当广泛,从.net环境到mono再到现在最新的Xamarin均支持。 它允许我们自定义从跟踪消息的来源(source)到记录跟踪信息的目标(target)的规则(rules)。target可以为文件、数据库、网络中的其它计算机(通过TCP或UDP)、基于MSMQ的消息队列、Windows系统日志等。 通过使用NLog...

1650

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

NLog条件配置,以实现将包含某个特定字符串日志写入指定文件介绍NLog的条件配置如何实现。

bianguanyue的博客 1140

.NET Core 之 六 日志系统

一、 飞机黑匣子 什么是日志,日志的作用; 基本概念 1、日志级别:Trace < Debug < Information < Warning < Error < Critical 2、日志提供者(LoggingPrivider):把日志输出到哪里,控制台 文本文件 数据库等; 3、.NET的日志非常灵活 ...

酷悦悦 1496

Nlog 日志框架使用介绍

原文地址:https://www.cnblogs.com/zh7791/p/12620439.html NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。 NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表...

luckypeng的专栏 7263

Nlog使用

参考这篇文章https://www.cnblogs.com/Cwj-XFH/p/5822837.html

3947

.NET Core 日志系统

配置NLog,输出信息

DotNeter-Hpf的博客 1064

CentOS8达梦数据库开机不自启

CentOS8达梦数据库开机不自启现象分析查看是否开启开机自启查看相关日志数据库日志操作系统日志SELinux关闭SELinx 现象 今天在验证DM主备集群故障测试时,reboot重启后发现数据库相关进程并没有自启。 分析 数据库进程没有自启可能会有两种原因: 1.没有设置开机自启 2.自启后报错,导致没有启动成功 查看是否开启开机自启 systemctl list-unit-files | grep Dm 已注册数据库开机自启服务 查看相关日志 与liunx开机自启相关的日志有: /var/log/b

qq_33965675的博客 1697
下一篇: NLog 在winform和asp.net下使用快速攻略
gglstudy2
博客等级 码龄18年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值