【译】Serilog 配置基础知识
Serilog 使用简单的C# API来配置日志记录。当外部配置需要时,可以使用Serilog.Settings.AppSettings包(.NET 框架)或Serilog.Settings.Configuration(.NET Core) 谨慎混合。
本文目录:
创建记录器
使用 LoggerConfiguration
对象创建记录器:
Log.Logger = new LoggerConfiguration().CreateLogger();
Log.Information("No one listens to me!");
上面的示例将创建一个记录器,该记录器不会在任何地方记录事件。要查看日志事件,必须配置接收器。
接收器
日志事件接收器通常将日志事件记录到某些外部表示形式,通常是控制台、文件或数据存储。Serilog 接收器通过 NuGet 分发。维基上列出了一个精选的可用接收器列表。
此示例将使用控制台接收器包(它漂亮地打印日志数据)和文件接收器包,后者将日志事件写入一组含有日期戳的文本文件。
Install-Package Serilog.Sinks.Console
Install-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)中,但字符串文本除外,这些文本是原样输出的。
对于更紧凑的级别名称,分别使用 {Level:u3}
三个字符大写或 {Level:w3}
小写作为级别名称的格式。
添加 {Properties:j}
到输出模板以包括其他上下文信息。
最低级别
Serilog 实现了日志事件处理的"最低级别"这一常见概念。
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
MinimumLevelDebug
对象提供要指定为最小值的日志事件级别之一。在上面的示例中,将处理 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();
在此示例中,调试日志将写入滚动文件,而只有 Information
级别日志和更高级别的日志将写入控制台。
所有提供的接收器都支持配置 restrictedToMinimumLevel
参数。
记录器与接收器最小值- 必须认识到,日志记录级别只能针对接收器升高,不能降低。因此,如果记录器 MinimumLevel
设置为 Information
,则以 Debug
为指定级别的接收器仍将看到 Information
级别事件。这是因为记录器级配置控制哪些日志记录语句将导致事件创建,而接收器级配置仅筛选这些事件。要创建具有更详细级别的单个记录器,请使用单独的 LoggerConfiguration
。
扩充器
Enrichers
是添加、删除或修改附加到日志事件的属性的简单组件。例如,这可用于将线程 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();
对于使用结构化存储的接收器,可以查看和筛选属性值,则扩充器及其附加的属性通常更有用。
过滤器
可以通过筛选有选择地记录事件。过滤器只是 LogEvent
上的谓词,一些常见的场景由匹配类处理。
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
实例。
【译】Serilog 配置基础知识的更多相关文章
- Ant学习-001-ant 基础知识及windows环境配置
一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...
- 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识
第25章 DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...
- [译]Serilog Tutorial
在过去的几年中,结构化日志已经大受欢迎.而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它. 0. 内容 设定目标 认识Serilog 事件和级 ...
- 【RL-TCPnet网络教程】第18章 BSD Sockets基础知识
第18章 BSD Sockets基础知识 本章节为大家讲解BSD Sockets,需要大家对BSD Sockets有个基础的认识,方便后面章节Socket实战操作. (本章的知识点主要整理自 ...
- IP 基础知识全家桶,45 张图一套带走
前言 前段时间,有读者希望我写一篇关于 IP 分类地址.子网划分等的文章,他反馈常常混淆,摸不着头脑. 那么,说来就来!而且要盘就盘全一点,顺便挑战下小林的图解功力,所以就来个 IP 基础知识全家桶. ...
- JAVA相关基础知识
JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...
- 后端程序员必备的 Linux 基础知识
1. 从认识操作系统开始 正式开始 Linux 之前,简单花一点点篇幅科普一下操作系统相关的内容. 1.1. 操作系统简介 我通过以下四点介绍什么是操作系统: 操作系统(Operating Syste ...
- Oracle基础知识汇总一
Oracle基础知识 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16720759.html oracle工具: SQ ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
随机推荐
- 如何在Linux上创建,列出和删除Docker容器
本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供 ...
- < python音频库:Windows下pydub安装配置、过程出现的问题及常用API >
< python音频库:Windows下pydub安装配置.过程出现的问题及常用API > 背景 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现.其中倒放与播放部分 ...
- 基于Redis的分布式锁和Redlock算法
1 前言 前面写了4篇Redis底层实现和工程架构相关文章,感兴趣的读者可以回顾一下: Redis面试热点之底层实现篇-1 Redis面试热点之底层实现篇-2 Redis面试热点之工程架构篇-1 Re ...
- 1064 朋友数 (20 分)C语言
如果两个整数各位数字的和是一样的,则被称为是"朋友数",而那个公共的和就是它们的"朋友证号".例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 ...
- MATLAB生成正弦波
要求:选定采样频率,生成不同频率的正弦波 程序: f1=100;%生成正弦波的频率 fs=1000;%采样频率 N=100;%采样点数 n=0:N-1; t=n/fs;%时间序列 y=sin(2*pi ...
- 【转】分布式服务框架 Zookeeper -- 管理分布式环境中的数据
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...
- 微信小程序----日期时间选择器(自定义精确到分秒或时段)
声明 bug:由于此篇博客是在bindcolumnchange事件中做的值的改变处理,因此会出现当你选择时,没有点击确定,直接取消返回后,会发现选择框的值依然改变.造成原因:这一点就是由于在bindc ...
- 记录我的 python 学习历程-Day13 匿名函数、内置函数 II、闭包
一.匿名函数 以后面试或者工作中经常用匿名函数 lambda,也叫一句话函数. 课上练习: # 正常函数: def func(a, b): return a + b print(func(4, 6)) ...
- 状态压缩 hdu #10
You are playing CSGO. There are n Main Weapons and m Secondary Weapons in CSGO. You can only choose ...
- ubuntu系统搭建(jdk1.8+mysql5.7.28+Hadoop2.7.7+hive3.1.2)
一不小心电脑没电关机之后虚拟机就挂了,然后下定决心重新搭一个虚拟机. 以下是几天安装过程的记录以及一些小提示,包括在ubuntu中安装jdk1.8+mysql5.7.28+Hadoop2.7.7+hi ...