Serilog文档翻译系列(一) - 入门指南

news/2024/11/16 4:17:59/文章来源:https://www.cnblogs.com/hugogoos/p/18380656

 

保持优质文档是 Serilog 的优先事项。如果你发现文档中有缺失或不准确的内容,或者希望通过添加主题或教程来扩展 wiki,请通过问题追踪系统告知我们。

为什么选择Serilog?

与许多其他 .NET 库一样,Serilog 提供了基本的诊断日志记录功能,支持文件、控制台等多种方式。它易于设置,具有简洁的 API,并且可以在最新的 .NET 平台之间移植。

与其他 .NET 日志库不同,Serilog 传递的参数不会被破坏性地转换为文本格式。相反,它们会作为结构化数据被保留,可以以文档形式写入 NoSQL 数据存储中。

var input = new { Latitude = 25, Longitude = 134 };
var time = 34;
log.Information("Processed {@SensorInput} in {TimeMS:000} ms", input, time);

Serilog 消息模板使用一种简单的领域特定语言(DSL),扩展了常规 .NET 格式字符串。属性在消息模板中命名,并与提供给日志方法的参数按位置匹配。

这个示例记录了两个属性:SensorInput 和 TimeMS,以及日志事件。

在 JSON 格式中,示例中捕获的属性将如下所示:

{ "SensorInput": { "Latitude": 25, "Longitude": 134 }, "TimeMS": 34 }

 在 SensorInput 前面的 @ 操作符指示 Serilog 保留传入对象的结构。如果省略这个操作符,Serilog 会识别简单类型,如字符串、数字、日期和时间、字典以及可枚举类型;其他对象会使用 ToString() 方法转换为字符串。可以使用 $ 操作符强制进行字符串化,代替 @ 操作符。

TimeMS 后面的 :000 部分是标准 .NET 格式字符串,影响属性的呈现方式(而不是捕获方式)。Serilog 附带的标准控制台接收器将把上述消息呈现为:

09:14:22 [Information] Processed { Latitude: 25, Longitude: 134 } in 034 ms

 从 NuGet 安装

核心日志记录包是 Serilog。支持的平台包括 .NET/.NET Core、.NET Framework 4.5+、Windows(8/WinRT/Universal+)和 Windows Phone 8+。

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

 浏览 NuGet 上的 Serilog 标签,查看可用的 sinks、扩展和相关的第三方包。

类型位于 Serilog 命名空间。

using Serilog;

 通过 LoggerConfiguration 创建根日志记录器。

using var log = new LoggerConfiguration().WriteTo.Console().CreateLogger();

 这通常在应用程序启动时完成,并将日志记录器保存以供应用程序类后续使用。如果需要,可以创建和独立使用多个日志记录器。

log.Information("Hello, Serilog!");

 Serilog 的全局、静态可访问日志记录器通过 Log.Logger 设置,可以使用 Log 类上的静态方法调用。

Log.Logger = log;
Log.Information("The global logger has been configured");

 配置和使用 Log 类是一种可选的便利性,方便库采用 Serilog。Serilog 本身的日志记录管道不要求任何静态/进程范围的状态,因此直接使用 Logger/ILogger 也是可以的。

示例应用程序

下面的完整示例展示了在一个简单的控制台应用程序中进行日志记录,事件会发送到控制台以及带有日期戳的滚动日志文件。

1.创建一个新的控制台应用程序项目

2.安装核心 Serilog 包、控制台接收器(sink)和文件接收器(sink)

在项目目录中的 shell 提示符下,输入:

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

 3.在 Program.cs 中添加以下代码

using System;
using Serilog;class Program
{static async Task Main(){Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console().WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day).CreateLogger();Log.Information("Hello, world!");int a = 10, b = 0;try{Log.Debug("Dividing {A} by {B}", a, b);Console.WriteLine(a / b);}catch (Exception ex){Log.Error(ex, "Something went wrong");}finally{await Log.CloseAndFlushAsync();}}
}

 4.运行程序

 

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

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

相关文章

数据分析1

数据分析:是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律数据分析三剑客:Numpy,Pandas,MatplotlibNumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。一、…

CSS调试 (1)

https://www.bilibili.com/video/BV1KM4y1G7EF/内容转自【浏览器调试工具精讲】Chrome Dev Tools精讲,前端必看! 橙色:外边距 蓝色:本体。 绿色:内边距。CTRL+ F 可以搜索 输入某一个string 或者 css,section#someid xpath: //section/p 编辑样式

多线程四-Lock锁及其原理分析

JUC是什么 可能有些不太关注底层代码,会不太理解juc是啥,比如之前的我,只知道是跟并发相关。juc其实就是并发包路径的缩写,java.util.concurrent.而Lock是其中锁的接口,有比如重入锁,读锁,写锁等一些具体实现。 这部分源码理解起来还是有些难度,暂时先理解其大概思路,…

Dijkstras algorithm All In One

Dijkstras algorithm All In One 迪杰斯特拉算法Dijkstras algorithm All In One迪杰斯特拉算法Dijkstra Dijkstras algorithm (/ˈdaɪkstrəz/ DYKE-strəz) is an algorithm for finding the shortest paths between nodes in a weighted graph, which may represent, for e…

Datawhale X 李宏毅苹果书AI夏令营 Task1打卡

3.1 局部极小值与鞍点 3.1.1 临界点及其分类参数对于损失函数的微分为零时,就无法进一步优化了,训练即停止了。所以我们把这些梯度为零的点统称为临界点 。 临界点可以分为两类:极值点 (局部极小值)和 鞍点 。 鞍点就是指那些梯度为零但不是局部极小值或者局部极大值的点,…

纪念第一次在 Github 上提 ISSUE 得到了老哥的回复

背景 第一次在 GitHub 上提 ISSUE,提问的内容就是我的上一篇博文 rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old method before version 6”,当时搞了好长时间都没思绪,然后就抱着试一试的心态在上面提了一个 ISSUE。 提问之后,又慢慢理了一…

sky-take-out chapter 5

微信登录 商品浏览 HttpClient (1)介绍 就是一个客户端编程工具包,更直白点就是我们可以在java程序中通过HttpClient这个工具包来构造http请求,并且可以来发送http请求;要使用httpclient就需要再java程序中导入maven坐标。 核心API:HttpClient 实际上是一个接口,使用它可…

可拖拽表单设计器都有哪些突出特点?

一起来了解低代码技术平台、可拖拽表单设计器的多个优势特点为了提高效率、降低开发成本,利用低代码技术平台的优势特点可以实现这一目标。究竟什么是低代码技术平台?都有哪些值得夸耀的特点和优势?今天,我们就带着这些问题,一起来了解低代码技术平台、可拖拽表单设计器的…

找到喜欢的事情,坚持去做!

村上春樹:临近三十岁的时候,我依旧一无所成, 我意识到自己并没有经营的才能,又不善于应酬,不喜欢社交,也不太喜欢认识新的东西。我酷爱音乐,但是在这个方面,也谈不上有什么成就。我似乎唯有的优点,就是喜欢的事,总能坚持去做。--- 自己的智力水平一般般,情商不高,也…

2024.8.27

DATE #:20240827 ITEM #:DOC WEEK #:TUESDAY DAIL #:捌月廿肆TAGS< BGM = "Dragonflame--Kirara Magic" > < theme = oi-contest > < theme = oi-data structure Segment > < [空] > < [空] >``` 渊沉鳞潜,冻血锈骨闭魂眼;披风游焰…

Datawhale X 李宏毅苹果书 AI夏令营 Task1.2 笔记

《深度学习详解》3.2节中关于批量和动量的主要内容总结:批量的概念:在深度学习训练过程中,数据不是一次性全部用于计算梯度,而是被分成多个小批量(batch),每个批量包含一定数量的数据。每个批量的损失函数用于计算梯度并更新模型参数。 批量大小对梯度下降法的影响:两种…

两个月Crypto从入门到进阶专题

前言: 作为我最开始主要的方向Crypto,好多基础的原理没有搞懂,只知道要这样用,俗话说"基础不牢,地动山摇",这样就导致一些会做的题在比赛中一旦提升一点点难度就出事故,我又是一个懒虫,借着这次带新生的机会,我将用两个月将Crypto从入门到进阶来一遍,以便新…