.net新兴日志框架Serilog简介
作者:天方 发布时间:2023-06-28 16:20:05
Serilog是.net下的新兴的日志框架,本文这里简单的介绍一下它的用法。
首先安装Nuget包:
Install-Package Serilog
Install-Package Serilog.Sinks.Console
其中包Serilog是Log核心库,Serilog.Sinks.Console是Log的控制台输出库,这个也是日志框架的一贯策略,一个核心库加多个输出库组合使用,这样可以保持良好的扩展性。
简单的示例:
using (var log = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger())
{
log.Information("Hello, Serilog!");
log.Warning("Goodbye, Serilog.");
}
输出结果如下:
LoggerConfiguration
这里用了一个LoggerConfiguration对象,它主要用于创建和设置Log对象,类似于Nlog里面的LogManager类。这里主要用它两个方法:
WriteTo:WriteTo属性用来设置日志的输出,Serilog将其称为Sink(水槽),还是比较形象的。
CreateLogger:用于创建一个ILogger类型的Logger对象.
ILogger
ILogger对象用于记录日志,和其他日志框架差不多。Serilog日志级别分为如下5级
Verbose,
Debug,
Information,
Warning,
Error,
Fatal,
大多数的日志也是这样5级,只是有的名称叫的不同(NLog第1级叫Trace,其它的一致),每一级别对应一个写Log的函数:
log.Verbose("verbose");
log.Information("info");
log.Debug("debug");
log.Warning("warning");
log.Error("err");
log.Fatal("fatal");
另外,ILogger对象还有一个Dispose方法,用于关闭日志对象。
全局Logger对象
在实际的使用过程中,往往并不是每次使用都去创建一个ILogger,一种方式是通过依赖注入的方式创建一个全局的Logger。不过这种方式需要引入DI框架。在小程序中使用不算方便。
另一种方式是直接使用静态的Log类,它也携带了写入日志的方法,用起来非常方便。
Log.Warning("warning");
Log.Error("err");
Log.Fatal("fatal");
不过Log类之前,首先必须给它关联一个ILogger。
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
*
Serilog的输出对象称之为Sink(水槽),github上提供了大量的第三方的可用sinks,这里简单的列举几个常用的:
Console 输出到控制台
Debug 输出到VS的Debug窗口
File 输出到文件
Rolling File
MongoDB 输出到MongoDB
LiteDB 输出到文件数据库LiteDB
SQLite 输出到文件数据库SQLite
SignalR 输出为SignalR服务
HTTP 输出到REST服务
输出格式配置
Serilog的日志输出通过LoggerConfiguration类配置,详细的配置参数可以参看官方文档:Configuration Basics。在日常使用中,感觉更多的是直接通过LoggerConfiguration在代码中配置。
来源:https://www.cnblogs.com/TianFang/p/9416238.html


猜你喜欢
- 1. 准备工作后台服务接口,对书本的增删改查操作2. 弹出窗口进入ElementUi官网, 找到Dialog对话框,可以参考&ldq
- 本文实例讲述了Python自定义scrapy中间模块避免重复采集的方法。分享给大家供大家参考。具体如下:from scrapy import
- 前言: 在项目开发中,一些业务表字段经常使用日期和时间类型,而且后续还会牵涉到这类字段的查询。关于日期及时间的查询等各类需求也很多,本篇文章
- 自己写的用js读取配置文件的程序 D:\Useful Stuff\Javascript\mytest.txt 文件内容如下 [plugin_
- 如果你过分信任 Access 2000数据库的密码保护,你可能会因此而蒙受损失。这是因为Access 2000的数据库级密码并不安全,相反它
- 最近在下载tensorflow的时候出现了如下图所示的情况:Could not find a version that satisfies
- 动画精灵和碰撞检测一、动画精灵动画精灵:四处移动的单个图像或图像部分称为动画精灵(sprite),pygame有一个特殊的模块帮助跟踪屏幕上
- 目录 一个简单的实现使用BSF(宽度优先搜索)进行实现使用DFA(Deterministic Finite Automaton)进
- 根据一些CSS写作经验,如何提高渲染效率及所占用消耗的资源,我们来浅谈一下CSS的渲染效率,书写高效的CSS。1、十六进制的颜色值对位数与大
- Python中的sys模块主要用于程序与解释器的交互,提供一系列函数和变量来处理Python运行环境1、sys.api_version --
- 前言在程序中我们经常可以看到有很多的加密算法,比如说MD5 sha1等,今天我们就来了解下这下加密算法的吧,在了解之前我们需要知道一个模块嘛
- 大家好,我又回来了。昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可
- 一、简介urllib 库,它是 Python 内置的 HTTP 请求库,不需要额外安装即可使用,它包含四个模块:`request` 请求模块
- 数据结构channel的数据结构在$GOROOT/src/runtime/chan.go文件下:type hchan struct {qco
- 目录实现思路使用BackgroundSubtractorMOG2进行背景分割使用人像识别填充面部信息使用形态学填充分割出来的前景将人像与目标
- views.py中的修改增加相应的请求处理函数:def getdevjson(request): print 'get here
- 最近学习了一点python,那就试着做一做简单的编程练习。 首先是这个编程的指导图,如下:对的,类似一个简单区块链的模拟。 代码如下:cla
- 一、apply和applymap1. 可直接使用NumPy的函数示例代码:# Numpy ufunc 函数df = pd.DataFrame
- 五一在家写的,和大家分享,支持所有浏览器,添加了左侧菜单点击变色效果<!DOCTYPE html PUBLIC "-//W3
- <html><head><title>遍历表格</title><script lang