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

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 及更高级别的日志事件将被处理并最终写入控制台。

级别

使用场景

Verbose(详细)

详细事件是最详细的级别,很少(甚至从不)在生产应用程序中启用

Debug(调试)

调试事件用于记录系统内部事件,这些事件不一定能从外部观察到,但是对应确定问题发生原因很有帮助

Information(信息)

信息事件描述系统中发生的事情,这些事情与系统的职责和功能相对应。通常,这些是系统可以执行的可观察操作

Warning(警告)

当服务降级、面临危险或可能超出其预期参数时,使用警告事件

Error(错误)

当功能不可用或预期被打破时,使用错误事件

Fatal(致命)

最关键的级别,致命事件需要立即关注

默认级别 - 如果未指定 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<int>("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对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RabbitMQ】快速上手

目 录 一. RabbitMQ 安装二. RabbitMQ 核心概念2.1 Producer 和 Consumer2.2 Connection 和 Channel2.3 Virtual host2.4 Queue2.5 Exchange2.6 RabbitMQ 工作流程 三. AMQP四. web界面操作4.1 用户相关操作4.2 虚拟主机相关操作 五. RabbitMQ 快速入门5.1 引入依赖5.2 编写生产…

stm32 8080时序驱动lcd屏幕

PSAM使用的硬件接口 PSAM读时序 PSAM写时序 相关时序 PSAM_RCRx NOR 和PSRAM控制寄存器

28. 双耳配对 - 配置

1. 概述 通过MAC地址的最后一位的奇偶来判断左右耳 2. 验证 右耳:奇数(主耳)-》BT ADDR: 12:42:22:34:34:6d 左耳:偶数(从耳)-》BT ADDR: 12:42:22:34:34:6c

TPH-YOLOv5:基于Transformer预测头的改进YOLOv5,用于无人机捕获场景的目标检测

摘要 提出了TPH-YOLOv5。在YOLOv5的基础上&#xff0c;增加了一个预测头来检测不同尺度的目标。然后用Transformer Prediction Heads&#xff08;TPH&#xff09;代替原有的预测头&#xff0c;探索自注意机制的预测潜力。还集成了卷积块注意力模型&#xff08;CBAM&#xff09;…

Gland安装与Debug

下载地址&#xff1a;https://www.jetbrains.com.cn/go/download/#sectionwindows debug官方文档: https://www.jetbrains.com/help/go/debugging-code.html 创建项目 选择新建项目 填写项目本地路径&#xff0c;以及选择go SDK 项目创建后检查项目设置 添加main包以及…

安装MySQL,navicat以及Django配置遇到的一些问题

MySQL安装问题 安装MySQL按照了此文章&#xff1a; MySQL数据库下载及安装教程&#xff08;最最新版&#xff09;_mysql下载安装-CSDN博客https://blog.csdn.net/weixin_39289696/article/details/128850498首先是遇到了starting the server红色叉号显示 按照上面文章的介绍…

Linux--IO多路复用(select,poll,epoll)

IO多路复用——select&#xff0c;poll&#xff0c;epoll IO多路复用是一种操作系统技术&#xff0c;旨在提高系统处理多个输入输出操作的性能和资源利用率。与传统的多线程或多进程模型相比&#xff0c;IO多路复用避免了因阻塞IO而导致的资源浪费和低效率问题。它通过将多个IO…

Linux awk案例

目录 1. 查询时间超过2000毫秒的请求2. 查询指定列组合出现的次数3. 统计所有文件的大小4. 获取大于指定大小的文件名&#xff0c;并按照从大到小排序5. grep指定字段后&#xff0c;使用awk列转行6. 查询第四个字段等于指定值的内容 1. 查询时间超过2000毫秒的请求 ✅log: 202…

[Leetcode 216][Medium]组合总和 III--回溯

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 对于组合问题&#xff0c;首先要想到回溯法。那么可以根据回溯法模版进行设计。 void backtrace(元素){if(满足题目要求的条件){保存目前路径/状态/结果;return;}for循环,往目前状态相邻的所…

区块链通证系统功能分析

区块链通证系统功能分析涉及多个关键方面&#xff0c;以确保系统能够满足不同的业务需求和合规性要求。 同质与非同质通证&#xff1a;区块链通证系统需要支持同质通证&#xff08;如ERC-20&#xff09;和非同质通证&#xff08;如ERC-721&#xff09;&#xff0c;以适应不同类…

《NLP自然语言处理》—— 关键字提取之TF-IDF算法

文章目录 一、TF-IDF算法介绍二、举例说明三、示例&#xff1a;代码实现四、总结 一、TF-IDF算法介绍 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种用于信息检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法&#xff0c;用以评估一个词…

机器人大会引领产业动向,卓翼飞思绘制无人系统教科研新蓝图

8月21日&#xff0c;万众瞩目的2024世界机器人大会暨博览会在北京亦创国际会展中心盛大开幕。这场为期5天&#xff0c;集“展览”“论坛”“赛事”于一体的机器人盛会&#xff0c;反映了当下机器人领域的繁荣生态。据官方统计数据&#xff0c;今年现场逛展观众高达25万人次&…

揭秘!糖尿病:从绝望到希望的治愈之路

在这个快节奏、高压力的时代&#xff0c;糖尿病这一“甜蜜的负担”正悄然影响着越来越多人的生活。面对这一全球性的健康挑战&#xff0c;许多患者心中都萦绕着一个共同的疑问&#xff1a;“糖尿病&#xff0c;真的能治好吗&#xff1f;”今天&#xff0c;就让我们一起揭开糖尿…

《黑神话:悟空》:30%抽成真相

《黑神话&#xff1a;悟空》自建服务器出售&#xff1f;揭秘游戏界的30%抽成真相&#xff01; 近年来&#xff0c;随着游戏行业的迅猛发展&#xff0c;游戏开发商与发行平台之间的利益分配问题逐渐成为业界关注的焦点。其中&#xff0c;《黑神话&#xff1a;悟空》作为一款备受…

排序算法:

冒泡排序&#xff1a; 从列表的第一个数字开始进行比较&#xff0c;判断该数和下一个数之间的大小关系&#xff0c;如果该数比右边的数大&#xff0c;则交换位置&#xff1b;否则不变。一般一轮可以确定最大的数字&#xff0c;在列表的最后一位。 代码&#xff1a; 注意&…

【设计模式】创建型模式——简单工厂模式

文章目录 一、创建型模式1. 包含模式1.1 工厂模式1.2 建造者模式1.3 原型模式1.4 单例模式 二、工厂模式1. 概要1.1 意图1.2 主要解决问题1.3 何时使用1.4 如何解决1.5 关键代码1.6 使用场景1.7 优点1.8 缺点1.9 简单工厂实现 2. 简单工厂模式2.1 模式结构2.2 实例2.3 模式定义…

python实战一:合并多个Excel中数据

看不懂可以跟着视频学一下&#xff0c;关于基础课程项目也可以私聊我&#xff01; 视频源码&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/2055653f735b 之前我们已经学习了如何读取和写入Execl数据&#xff0c;今天我们来用一个实例来进行表格的合并。如下是 2021年…

YOLOv9改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络

一、本文介绍 本文记录的是基于ShufflenetV2的YOLOv9目标检测轻量化改进方法研究。FLOPs是评价模型复杂独的重要指标&#xff0c;但其无法考虑到模型的内存访问成本和并行度&#xff0c;因此本文在YOLOv9的基础上引入ShufflenetV2&#xff0c;使其在在保持准确性的同时提高模型…

多线程篇(基本认识 - 锁优化)(持续更新迭代)

目录 一、前言 二、阿里开发手册 三、synchronized 锁优化的背景 四、Synchronized的性能变化 1. Java5之前&#xff1a;用户态和内核态之间的切换 2. java6开始&#xff1a;优化Synchronized 五、锁升级 1. 无锁 2. 偏向锁 2.1. 前言 2.2. 什么是偏向锁 2.3. 偏向…

ChatTTS 长音频合成和本地部署2种方式,让你的“儿童绘本”发声的实战教程(文末有福利)

接上文&#xff08;GLM-4-Flash 大模型 API 免费了&#xff0c;手把手构建“儿童绘本”应用实战&#xff08;附源码&#xff09;&#xff09;&#xff0c;老牛同学通过 GLM-4-Flash 文生文和 CogView-3 文生图大模型&#xff0c;和大家一起编写了一个图文并茂的儿童绘本应用&am…