网易首页 > 网易号 > 正文 申请入驻

Serilog文档翻译系列(三) - 基础配置

0
分享至



Serilog 使用简单的 C# API 来配置日志记录。当需要外部配置时,可以(慎用)通过使用 Serilog.Settings.AppSettings 包或 Serilog.Settings.Configuration 包进行混合配置。

创建日志记录器

日志记录器是通过 LoggerConfiguration 对象创建的:

Log.Logger = new LoggerConfiguration().CreateLogger();
Log.Information("No one listens to me!");
// Finally, once just before the application exits...
Log.CloseAndFlush();

上面的示例将创建一个不记录任何事件的日志记录器。要查看日志事件,必须配置一个接收器。

接收器

日志事件接收器通常将日志事件记录到某些外部表示形式中,最常见的是控制台、文件或数据存储。Serilog 的接收器通过 NuGet 分发。在 Wiki 上,有一个精心整理的可用接收器列表。

这个示例将使用控制台接收器包和文件接收器包,控制台接收器包用于格式化日志数据输出到控制台,文件接收器包用于将日志事件写入一组按日期标记的文本文件。

$ dotnet add package Serilog.Sinks.Console
$ dotnet add package Serilog.Sinks.File

接收器通过 WriteTo 配置对象进行配置。

Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
Log.Information("Ah, there you are!");

多个接收器可以同时激活。如果需要添加额外的接收器可以通过链式调用 WriteTo 块来实现:

Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("log-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
输出模板

基于文本的接收器使用输出模板来控制格式。可以通过 outputTemplate 参数进行修改:

.WriteTo.File("log.txt",outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")

上面的示例中展示的默认模板使用了内置的属性,如Timestamp和Level。来自事件的属性,包括使用增强器附加的属性,也可以出现在输出模板中。

{Message:lj} 格式选项使消息中的数据以 JSON 格式(j)输出,但字符串文字会原样输出。

添加 {Properties:j} 到输出模板中,以包括额外的上下文信息。

在输出模板中添加{Properties:j}可以包含额外的上下文信息。这允许你将与日志事件相关联的所有属性(包括自定义属性)以 JSON 格式输出到日志文件中,从而提供额外的调试和跟踪信息。

最低级别

Serilog 实现了日志事件处理中常见的“最低级别”概念。

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();

MinimumLevel 配置对象允许指定一个日志事件级别作为最低级别。在上面的示例中,级别为 Debug 及更高级别的日志事件将被处理并最终写入控制台。



默认级别 - 如果未指定 MinimumLevel,则将处理 Information 级别及更高级别的事件。

覆盖每个接收器

有时,我们希望将详细的日志写入一个介质,而将不太详细的日志写入另一个介质。

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.File("log.txt")
.WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Information)
.CreateLogger();

在这个例子中,调试级别的日志将被写入到滚动文件中,而只有级别及以上的日志会被写入到控制台。而只有信息级别日志和更高级别的日志将写入控制台

所有提供的接收器都支持 restrictedToMinimumLevel 配置参数。

记录器与接收器的最低级别 - 需要了解的是,日志级别只能提高,而不能降低。也就是说,如果记录器的 MinimumLevel被设置为 Information,那么即使接收器的指定级别为 Debug,它仍然只会接收到 Information 级别的事件。这是因为记录器级别配置是控制哪些日志语句会导致事件的创建,而接收器级别配置是对这些事件进行筛选。如果你想要创建具有更详细级别的单一记录器,那么你应该使用单独的 LoggerConfiguration实例。

增强器

增强器是简单的组件,用于添加、删除或修改附加到日志事件的属性。例如,可以使用 增强器为每个事件附加线程 ID。

class ThreadIdEnricher : ILogEventEnricher
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(
"ThreadId", Thread.CurrentThread.ManagedThreadId));

增强器是通过 Enrich 配置对象来添加的。

Log.Logger = new LoggerConfiguration()
.Enrich.With(new ThreadIdEnricher())
.WriteTo.Console(outputTemplate: "{Timestamp:HH:mm} [{Level}] ({ThreadId}) {Message}{NewLine}{Exception}")
.CreateLogger();

上面的配置展示了如何通过增强器添加的属性在输出格式化中使用。

如果在应用程序运行期间,增强的属性值是恒定的,可以使用快捷方法 WithProperty 来简化配置。

Log.Logger = new LoggerConfiguration()
.Enrich.WithProperty("Version", "1.0.0")
.WriteTo.Console()
.CreateLogger();

增强器以及它们附加的属性通常与使用结构化存储的接收器一起使用时更加有用,因为在这些接收器中可以查看和过滤属性值。

过滤器

事件可以通过过滤器进行选择性记录。过滤器只是日志事件的筛选规则,其中一些常见场景由 Matching 类处理。

Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.Filter.ByExcluding(Matching.WithProperty("Count", p => p < 10))
.CreateLogger();
子日志记录器

有时,需要对接收器看到的内容进行更细粒度的控制。为此,Serilog 允许完整的日志记录管道作为接收器使用。

Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.Logger(lc => lc
.Filter.ByIncludingOnly(...)
.WriteTo.File("log.txt"))
.CreateLogger();

对于子日志记录器处理不佳的场景,可以创建多个独立的顶级管道。虽然 Log.Logger 只能分配一个管道,但你的应用程序可以使用任意数量的额外 ILogger 实例。

请注意,如果在 WriteTo.Logger() 回调中指定了解构策略,则这些策略将不会生效,因为子日志记录器处理的是已经创建的LogEvent对象。

声明:个人原创,仅供参考

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
教育部门为缓解教师压力,拟实行绩效新方案。班主任、高级职称

教育部门为缓解教师压力,拟实行绩效新方案。班主任、高级职称

梨园小学校
2024-12-23 09:53:10
公牛在谈判中并没有为难快船,球哥的交易预计很快达成

公牛在谈判中并没有为难快船,球哥的交易预计很快达成

鸡丁侃球
2024-12-26 04:04:09
佩特科维奇:除了温网和澳网,德约都不屑一顾,25冠后会急流勇退

佩特科维奇:除了温网和澳网,德约都不屑一顾,25冠后会急流勇退

网球之家
2024-12-26 13:05:31
20岁小伙发现彩票终极奥秘,一年豪赚80亿,现金堆满豪宅

20岁小伙发现彩票终极奥秘,一年豪赚80亿,现金堆满豪宅

灿烂夏天
2024-12-22 22:20:12
43分+41分!联盟第一!哈登果然赌赢了,他们两人成为最大赢家

43分+41分!联盟第一!哈登果然赌赢了,他们两人成为最大赢家

康泳哥看体育
2024-12-25 21:40:41
无需训练、即插即用,新算法大幅增强视频生成质量

无需训练、即插即用,新算法大幅增强视频生成质量

量子位
2024-12-25 21:38:04
赫尔松前线俄军拒绝作战?乌克兰将生产3千枚覆盖莫斯科的导弹

赫尔松前线俄军拒绝作战?乌克兰将生产3千枚覆盖莫斯科的导弹

项鹏飞
2024-12-24 21:21:09
电销人员集体破防:现在人流行陌生电话拒接,接电话的寥寥无几!

电销人员集体破防:现在人流行陌生电话拒接,接电话的寥寥无几!

猫小狸同学
2024-12-20 18:35:03
4000万欧!利雅得胜利酝酿梦幻签约,取代塔利斯卡,剑指亚冠冠军

4000万欧!利雅得胜利酝酿梦幻签约,取代塔利斯卡,剑指亚冠冠军

球场没跑道
2024-12-26 14:48:11
排队道歉!哈特:麻烦大家填一下给布里奇斯的道歉表哈

排队道歉!哈特:麻烦大家填一下给布里奇斯的道歉表哈

直播吧
2024-12-26 15:35:07
上个月,我去了趟拉萨回来后,我只想说,能不去就尽量不去

上个月,我去了趟拉萨回来后,我只想说,能不去就尽量不去

猫小狸同学
2024-11-28 13:45:03
工信部:2025年车企可自行车检,小米、理想、蔚来等车企被排除

工信部:2025年车企可自行车检,小米、理想、蔚来等车企被排除

沙雕小琳琳
2024-12-26 10:03:51
高叶的健身照,果然大嫂不愧是大嫂

高叶的健身照,果然大嫂不愧是大嫂

视点历史
2024-11-11 22:45:07
德国倒戈,北约秘书长训了泽连斯基一顿

德国倒戈,北约秘书长训了泽连斯基一顿

军事作家陈曦
2024-12-25 14:44:12
当年轻人听说不生育就下调养老金是啥反应?评论区太真实了!笑喷

当年轻人听说不生育就下调养老金是啥反应?评论区太真实了!笑喷

滑稽斑马呀
2024-12-26 11:28:13
刘亦菲隐私遭泄露!同学曝其旧照和信息,霸凌她的韩国女生首曝光

刘亦菲隐私遭泄露!同学曝其旧照和信息,霸凌她的韩国女生首曝光

古希腊掌管月桂的神
2024-12-26 12:28:54
辽宁首节险胜广州!全民皆兵,杨鸣8人轮换,张陈治锋差点意思!

辽宁首节险胜广州!全民皆兵,杨鸣8人轮换,张陈治锋差点意思!

篮球资讯达人
2024-12-26 20:03:34
特斯拉 Cybertruck 车主反馈:提车不到 3 天遇到漏油问题

特斯拉 Cybertruck 车主反馈:提车不到 3 天遇到漏油问题

IT之家
2024-12-25 10:30:13
阿斯利康中国总裁王磊被正式批捕,如何从小导游到总裁,再到罪犯

阿斯利康中国总裁王磊被正式批捕,如何从小导游到总裁,再到罪犯

蜉蝣说
2024-12-26 10:41:13
突然宣布!手上有2套以上房产的家庭,按照新规,房产税或这样征

突然宣布!手上有2套以上房产的家庭,按照新规,房产税或这样征

巢客HOME
2024-12-24 08:45:00
2024-12-26 23:12:49
IT规划师
IT规划师
热爱编程,追求最佳实践,喜欢思想的碰撞
65文章数 906关注度
往期回顾 全部

科技要闻

小米正搭建GPU万卡集群,大力投入AI大模型

头条要闻

柯文哲遭起诉求刑28年半 中国国民党、民进党表态

头条要闻

柯文哲遭起诉求刑28年半 中国国民党、民进党表态

体育要闻

再见,中超最后的超级巨星

娱乐要闻

57岁王祖贤分享近照,状态太好又被质疑整容

财经要闻

69亿订单"消失",卓然股份隐藏了什么?

汽车要闻

新物种iCAR V23的“尤里卡时刻”

态度原创

教育
家居
旅游
亲子
时尚

教育要闻

安庆一中数学考试题,代数式求值经典题目,误用韦达定理不应该。

家居要闻

现代简约 提升温馨质感

旅游要闻

韩国考虑对一定范围内的中国团体游客试行免签政策

亲子要闻

如何选择牙刷?

实用!我找到了永不反弹的衣柜整理大法

无障碍浏览 进入关怀版