保持优质文档是 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.运行程序

Serilog文档翻译系列(一) - 入门指南的更多相关文章

  1. 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍

    我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...

  2. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据

    我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...

  3. 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模

    我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...

  4. 一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化

    在前面的系列文章中,我们介绍了官方有关获取数据,以及建模的原始文档和基本介绍.今天继续给大家介绍官方文档中,有关可视化的内容.实际上获获取数据和建模更注重业务关系的处理,而可视化则关注对数据的解读.这 ...

  5. 一起学微软Power BI系列-官方文档-入门指南(5)探索数据奥秘

    我们几篇系列文章中,我们介绍了官方入门文档与获取数据等基本知识.今天继续给大家另外一个重点,探索数据奥秘.有了数据源,有了模型,下一步就是如何解析数据了.解析数据的过程需要很多综合技能,不仅仅是需要掌 ...

  6. 一起学微软Power BI系列-官方文档-入门指南(6)Power BI与Excel

    今天介绍了官方入门文档中有关PowerBI和Excel的知识.前几篇入门文档有点仓促,加上最近时间的研究,会有更多技巧性和入门型的文章或者视频发布,最后2篇入门文档将更加详细一点,因为部分文章进行简单 ...

  7. 一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档

    接触Power BI的时间也只有几个月,虽然花的时间不多,但通过各种渠道了解收集,谈不上精通,但对一些重要概念和细节还是有所了解.在整理官方文档的过程中,也熟悉和了解了很多概念.所以从前到后把微软官方 ...

  8. 【资料收集】OpenCV入门指南 系列文章

    <OpenCV入门指南>系列文章地址:http://blog.csdn.net/morewindows/article/category/1291764 目录: 第一篇  安装OpenCV ...

  9. IPv6系列-入门指南

    本文是<IPv6系列>文章的第一篇<入门指南>,用于快速了解并上手IPv6. 小慢哥的原创文章,欢迎转载 目录 ▪ 一. 为什么要了解IPv6 ▪ 二. 顾虑:IPv6地址太复 ...

  10. ASP.NET MVC 5 入门指南汇总

    经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...

随机推荐

  1. new操作符具体干了什么呢?

    new操作符的作用如下: 1.创建一个空对象2.由this变量引用该对象3.该对象继承该函数的原型4.把属性和方法加入到this引用的对象中5.新创建的对象由this引用,最后隐式地返回this.过程 ...

  2. js 异步 任务 题目解析(chatgpt bug了?)

    最近遇到一道题如下,求输出结果 感觉还是蛮有意思的,找chatgpt做了一下 我是题 async function async1(){ console.log('1'); await async2() ...

  3. [oeasy]python0109_tty_打字头_电传打字机_字模_点阵字库

    点阵字库 回忆上次内容 上次回顾了 字符字型 的 进化过程 从 谷腾堡 活字 到 罗马正字 和 意大利斜体   罗马帝国战斗力的征服 和 基督教文化传播 使得 拉丁字符 在日耳曼语地区广泛传播 种葡萄 ...

  4. vue table表格实现无缝滚动 鼠标进入可悬停

    <el-table ref="table" :data="tableData" :header-cell-style="{background: ...

  5. app专项测试:app弱网测试

    app专项测试:app弱网测试 弱网测试背景 用户体验 APP使用过程中,弱网的高延迟和高丢包,在实时性要求非常高的场景,容易伤害用户体验 非正常情况下,Bug出现几率会增加 在解决日常支持需求中,经 ...

  6. 【杂谈】JPA乐观锁改悲观锁遇到的一些问题与思考

    背景 接过一个外包的项目,该项目使用JPA作为ORM. 项目中有多个entity带有@version字段 当并发高的时候经常报乐观锁错误OptimisticLocingFailureException ...

  7. argparse学习笔记

    argparse是 Python 的一个内置模块,用于编写用户友好的命令行接口.使用 argparse,你可以很容易地为 Python 脚本添加参数解析功能,使得脚本可以接受命令行选项和参数.学起来也 ...

  8. 【ElasticSearch】04 Spring-Data-ElasticSearch

    官方网站: https://spring.io/projects/spring-data-elasticsearch 对应 Elasticsearch7.6.2,Spring boot2.3.x 一般 ...

  9. 【ElasticSearch】03 部署

    Windows集群部署: 把包解压成三个节点 [kibana-7.16.3-windows-x86_64.zip] - Node-1001 - Node-1002 - Node-1003 修改集群的配 ...

  10. 【Maxwell】01 安装及入门

    官网地址: https://maxwells-daemon.io/ 下载地址(版本发行): https://github.com/zendesk/maxwell/releases 参考教程自尚硅谷视频 ...