保持优质文档是 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. VMware vCenter Server 7.0U3r 下载 - 修复堆溢出 (远程执行代码) 和本地权限提升漏洞

    VMware vCenter Server 是一款高级服务器管理软件,提供了一个集中式平台来控制 vSphere 环境,以实现跨混合云的可见性. 简化且高效的服务器管理 什么是 vCenter Ser ...

  2. Simple WPF: WPF自定义一个可以定义步长的SpinBox

    最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园. 通过WPF的按钮.文本输入框实现了一个简单的SpinBox数字输入用户组件并可以通过数据绑定数值和步长.本文中介绍了通过Xaml代码 ...

  3. 部分解决 | ocrmypdf对中文pdf进行ocr识别后存在多余空格

    1.问题 ocrmypdf安装采用的是在windows安装方法具体看 https://media.readthedocs.org/pdf/ocrmypdf/latest/ocrmypdf.pdf 由于 ...

  4. ModuleNotFoundError: No module named 'import_export'

    当你遇到 "ModuleNotFoundError: No module named 'import_export'" 错误时,这表示你的 Python 脚本或应用程序试图导入名为 ...

  5. 深入探讨Spring Boot中的参数传递

    深入探讨Spring Boot中的参数传递 在Spring Boot开发中,参数传递是一个非常常见且重要的操作.无论是处理HTTP请求,还是在方法之间传递数据,理解和掌握参数传递的各种方式都能让我们的 ...

  6. Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应

    什么是授权(Authorization)? 在 ASP.NET Core 中,授权(Authorization)是控制对应用资源的访问的过程.它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作 ...

  7. mp实现一个自连接查询

    起因是我设置了一个考核表结构,其中包含指标值,指标当前值,是主副指标等列. 后面我要进行考核的验收的时候,我发现验收要取得的是主当前指标值/主指标值以及副指标当前值/副指标值.如果想要让这两条数据一次 ...

  8. app备案证明需要提供md5值和公钥的解决方案

    现在app上架华为市场.小米市场.苹果市场等大型的应用商店,都需要提供国内的app备案证明.无论是安卓还是ios,都需要备案了. 但是问题是备案的时候需要填写app的bundle ID.公钥和MD5值 ...

  9. Python和RPA网页自动化-让非标准下拉框选择指定文本的方法

    以下方"节点审批"下拉框为例 该下拉框没有<select>标签,而是<div><ul><li>标签.分别使用Python和RPA网页 ...

  10. Snipaste截图工具-测试工程师强推

    Snipaste主要功能是截图和贴图,网上下载直接安装即可. 个人认为Snipaste比其它截图好用的点: 快捷键简单.Snipaste只需按F1截图,不会和其它截图工具的快捷键冲突 贴图功能.贴图功 ...