目录
一 上章回顾
二 Nlog
Nlog博各家之所长,既拥有Log4net配置的灵活性,又兼顾了Serilog结构化日志记录的特性
1 简介
Nlog支持结构化日志记录,并且在日志存储的位置和方式方面都保持很高的灵活性,兼备二者的特点
2 配置
实例通过Nlog,生成记录器实例,GetCurrentClassLogger方法确保将记录器实例分配给当前类,然后记录信息日志。
//初始化
private readonly NLog.Logger _logger = LogManager.GetCurrentClassLogger();
//记录信息级别
_nlog.Error("这是Nlog的输出日志");
3 功能
NLog 提供了两全其美的功能——结构化日志记录和 XML 驱动的配置。
_nlog.Error("这是Nlog的输出日志,欢迎{@logInfo}登录上线", loginInfo);
_nlog.Error("这是Nlog的输出日志,User Name is {UserName},password is {Password}", loginInfo.UserName, loginInfo.Password);
这简单的几行代码和Serilog一样,可以记录类名到属性全面详细的信息,更容易在以后进行查找处理,请注意我们是如何将userName和password直接传递到消息记录中去的,同学们可以猜测一下记录结果会是什么样的?
有同学猜到了吗,他和Serilog一样支持结构化查询记录
三 优势
- 结构化日志记录:不如 Serilog 那样深入挖掘,但它可以在不增加额外开销的情况下完成工作。
- 灵活性:在可配置性和定义日志输出(文件、控制台、数据库或电子邮件)方面,NLog 与 log4net 一样灵活方便。
// NLog – 配置多个日志输出目标
var config = new NLog.Config.LoggingConfiguration();
// 日志输出目标 - 文件和控制台
var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "log.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
// 日志记录器与目标的映射规则
config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
// 应用配置
NLog.LogManager.Configuration = config;
给出的代码提供了一个场景,其中 NLog 配置两个日志记录目标,即Console和File。AddRule函数是将特定日志级别映射到输出目标的方法。
四 弊端
- 与 log4net 相比还不够成熟;它存在的时间较短。
- 尽管它具有结构化日志记录,但它并不像 Serilog 那样发展或复杂。如果你对结构化日志记录有更高需求,你可能还想探索 Serilog。
五 应用情景
对于需要结构化日志记录功能但又不想承担Serilog可能带来的计算负担的项目来说是首选。在日志生成量相当高的限流场景下,NLog的性能表现更佳。
六 总结
以上我给大家介绍了Nlog简介、优势、弊端、应用场景等内容,我们从中可以了解Nlog的工作原理。
七 下章预告
下一章我会教大家三者对比。
博主RaymondLeigh:如果您觉得本文为您提供了结局思路或解决了您的实际问题,麻烦您🙏帮忙点赞、收藏、评论、关注一键四连,您的举手之劳将为我写作提供动力源泉!🤞
print('Hello,RaymondLeigh!') # 每日问候,跟大家问好!
🌞精品前端UI设计专栏:MaterialDesign专栏
💾精品后端数据库专栏:SqlServer专栏 EFCore专栏 Socket专栏 C#日志库专栏
💻精品程序开发专栏 VisualStudio专栏