Serilog: 强大的 .NET 日志库
Serilog 是一个功能强大的日志记录库,专为 .NET 平台设计。它提供了丰富的 API 和可插拔的输出器及格式化器,使得开发者能够轻松定制和扩展日志记录功能。在本文中,我们将探索 Serilog 的基础知识、API 使用、配置和一些常见的示例。
1. 日志级别
Serilog 支持多个日志级别,按照严重性从高到低排列如下:
- Fatal: 程序无法继续运行,必须立即解决的问题。
- Error: 发生了错误,需要处理。
- Warning: 警告,需关注但不必立即处理。
- Information: 提供有用的消息,通常用于调试。
- Debug: 调试信息,帮助开发者调试程序。
- Verbose: 详细的日志信息,通常用于复杂问题的调试。
2. 日志输出
Serilog 支持多种日志输出方式,包括:
- Console: 输出到控制台。
- File: 输出到文件。
- Seq: 输出到日志收集器 Seq。
- Elasticsearch: 输出到 Elasticsearch。
此外,Serilog 也支持自定义日志输出器。
3. 日志格式
Serilog 提供了多种格式化日志消息的方式:
- 简单文本格式:常见的日志输出格式。
- JSON 格式:适合结构化日志。
- Message Templates 格式:一种灵活的格式,允许在日志消息中插入占位符。
4. 安装
Serilog 可以通过 NuGet 安装:
Install-Package Serilog
5. 基础使用示例
在应用程序中使用 Serilog 十分简单。以下是一个简单的控制台日志输出示例:
using Serilog;class Program
{static void Main(){Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console().CreateLogger();Log.Information("Hello, Serilog!");Log.CloseAndFlush();}
}
此代码将在控制台输出 Hello, Serilog!
。
6. 日志级别示例
Serilog 允许设置不同的日志级别。以下示例演示了如何记录各种级别的日志消息:
using Serilog;class Program
{static void Main(){Log.Logger = new LoggerConfiguration().MinimumLevel.Verbose().WriteTo.Console().CreateLogger();Log.Verbose("This is a verbose log message.");Log.Debug("This is a debug log message.");Log.Information("This is an informational log message.");Log.Warning("This is a warning log message.");Log.Error("This is an error log message.");Log.Fatal("This is a fatal log message.");Log.CloseAndFlush();}
}
7. 消息模板
Serilog 支持消息模板,允许开发者在日志中使用占位符。以下示例展示了如何使用消息模板:
using Serilog;class Program
{static void Main(){Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}").CreateLogger();Log.Information("Hello, {Name}!", "Serilog");Log.CloseAndFlush();}
}
上述代码将在控制台输出如下格式的日志:
2023-09-15 22:23:54.576 +08:00 [INF] Hello, Serilog!
8. 日志属性
Serilog 支持在日志中添加附加属性。以下示例展示了如何记录额外的信息:
using Serilog;class Program
{static void Main(){Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console().CreateLogger();Log.Information("Processed {@Count} records in {Time} ms.", new { Count = 10, Time = 123 });Log.CloseAndFlush();}
}
此代码会输出:
Processed { Count: 10, Time: 123 } records in 0 ms.
9. 文件输出配置
Serilog 允许将日志输出到文件,并通过 rollingInterval
设置日志滚动方式。以下示例展示了如何按天滚动文件并设置输出模板:
Log.Logger = new LoggerConfiguration().WriteTo.File($"logs\\log-.txt", rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}").CreateLogger();Log.Information("This is a log message!");Log.CloseAndFlush();
这将创建类似于 log-20230914.txt
的文件,每天一个新文件。
10. 结构化日志记录
Serilog 支持结构化日志记录,这意味着可以将复杂的数据(如对象、集合等)以结构化的方式存储和输出。例如:
using Serilog;class Program
{static void Main(){var weather = new WeatherForecast{Date = DateTime.Now,TemperatureC = 22,Summary = "Sunny"};Log.Information("Weather forecast: {@Weather}", weather);Log.CloseAndFlush();}
}public class WeatherForecast
{public DateTime Date { get; set; }public int TemperatureC { get; set; }public string Summary { get; set; }
}
此代码将输出类似于:
Weather forecast: {"Date":"2023-09-15T22:39:53.8634787+08:00","TemperatureC":22,"Summary":"Sunny","$type":"WeatherForecast"}
11. 日志过滤
Serilog 允许使用过滤器控制输出。以下示例仅输出错误级别以上的日志:
using Serilog;class Program
{static void Main(){Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console().Filter.ByIncludingOnly(logEvent => logEvent.Level >= LogEventLevel.Error).CreateLogger();Log.Verbose("This is a verbose log message.");Log.Error("This is an error log message.");Log.CloseAndFlush();}
}
此代码只会在控制台输出错误和更高严重级别的日志。
12. 扩展与自定义输出器
Serilog 支持自定义输出器,允许开发者将日志输出到不同的目的地(例如 Elasticsearch、数据库等)。以下是一个创建自定义控制台输出器的例子:
using Serilog;
using Serilog.Configuration;
using Serilog.Events;public static class CustomConsoleSinkExtensions
{public static LoggerConfiguration CustomConsole(this LoggerSinkConfiguration sinkConfiguration,ITextFormatter formatter = null,LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum){return sinkConfiguration.Sink(new CustomConsoleSink(formatter),restrictedToMinimumLevel);}
}public class CustomConsoleSink : ILogEventSink
{private readonly ITextFormatter _formatter;public CustomConsoleSink(ITextFormatter formatter){_formatter = formatter ?? throw new ArgumentNullException(nameof(formatter));}public void Emit(LogEvent logEvent){var message = new StringWriter();_formatter.Format(logEvent, message);Console.WriteLine(message.ToString());}
}
然后可以通过以下方式将其添加到日志配置中:
Log.Logger = new LoggerConfiguration().WriteTo.CustomConsole().CreateLogger();
13. 总结
Serilog 是一个功能强大的 .NET 日志库,支持丰富的日志记录方式、输出方式和格式化选项。它的可扩展性和灵活性使得开发者能够根据应用程序的需求定制日志记录方式。从简单的控制台日志到复杂的结构化日志和自定义输出器,Serilog 都能轻松应对。
希望本文对您理解 Serilog 和高效使用该库有所帮助!
相关文章:
Serilog: 强大的 .NET 日志库
Serilog 是一个功能强大的日志记录库,专为 .NET 平台设计。它提供了丰富的 API 和可插拔的输出器及格式化器,使得开发者能够轻松定制和扩展日志记录功能。在本文中,我们将探索 Serilog 的基础知识、API 使用、配置和一些常见的示例。 1. 日志…...
串口通讯基础
第1章 串口的发送和接收过程 1.1 串口接收过程 当上位机给串口发送(0x55)数据时,MCU的RX引脚接受到(0x55)数据,数据(0x55)首先进入移位寄存器。数据全部进入移位寄存器后,一次将(0x55)全部搬运…...
SSL证书和HTTPS:全面解析它们的功能与重要性
每当我们在互联网上输入个人信息、进行在线交易时,背后是否有一个安全的保障?这时,SSL证书和HTTPS便扮演了至关重要的角色。本文将全面分析SSL证书和HTTPS的含义、功能、重要性以及它们在网络安全中的作用。 一、SSL证书的定义与基本概念 S…...
全国青少年航天创新大赛各项目对比分析
全国青少年航天创新大赛各项目对比分析 一、比赛场地对比 项目名称场地尺寸场地特点组别差异筑梦天宫虚拟三维场景动态布局,小学组3停泊处,初高中组6停泊处;涉及传送带、机械臂、传感器等虚拟设备。初中/高中组任务复杂度更高,运…...
低空监视-无人机专用ADS-B应答机
产品简介 ping200XR是经过TSO适航认证的无人机专用ADS-B应答机,用于中大型无人机的低空监视。将经过认证的航空级航电设备引入无人机系统。该应答机支持航管二次雷达A,C/S模式和ADS-B OUT。重量仅52克满足无人机所面临的尺寸、重量、功耗的挑战…...
【linux】文件与目录命令 - sort
文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项 sort 命令用于对文本文件中的行进行排序,支持按字母顺序、数值大小、特定字段等方式进行排序。默认按字母顺序升序排序。 1. 基本用法 语法: sort [选项] 文件 sort [选项] -o 输出文件 文件功能…...
【工具推荐】在线提取PDF、文档、图片、论文中的公式
网址1:https://simpletex.cn/ai/latex_ocr 网址2: https://www.latexlive.com/home 推荐理由:无需下载,在线使用,直接 截图 CTRLV 效果更佳。...
大模型在垂直行业的落地实践:从通用到定制化的技术跃迁
大模型在垂直行业的落地实践:从通用到定制化的技术跃迁 一、通用大模型的局限性:从 “全能” 到 “专精” 的转型挑战 通用大模型,如 GPT 系列,凭借其强大的自然语言处理能力,在文本生成、语义理解、机器翻译等基础任…...
FPGA开发,使用Deepseek V3还是R1(1):应用场景
以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…...
Docker概念与架构
文章目录 概念docker与虚拟机的差异docker的作用docker容器虚拟化 与 传统虚拟机比较 Docker 架构 概念 Docker 是一个开源的应用容器引擎。诞生于 2013 年初,基于 Go 语言实现。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中…...
算法之数据结构
目录 数据结构 数据结构与算法面试题 数据结构 《倚天村 • 图解数据结构》 | 小傅哥 bugstack 虫洞栈 ♥数据结构基础知识体系详解♥ | Java 全栈知识体系 线性数据结构 | JavaGuide 数据结构与算法面试题 数据结构与算法面试题 | 小林coding...
Mysql学习笔记(六)Django连接MySQL
一、Django中的MySQL驱动程序 Python中常见的MySQL驱动程序: MySQL-python:就是MySQLdb,是对C语言操作MySQL的封装,支持Python2,不支持Python3mysqlclient:MySQL-python的另一个分支,支持Python3pymysql&am…...
手机号码归属地的实现
手机号码归属地查询一般可以通过以下几种方式实现: 1. 使用公开的号码归属地数据库 可以使用国内的手机号码归属地数据库,如: 百度号码归属地开放API阿里云号码归属地API腾讯号码归属地API 你可以在本地存储一个 CSV 或 SQLite 数据库&…...
本地部署 DeepSeek:从 Ollama 配置到 Spring Boot 集成
前言 随着人工智能技术的迅猛发展,越来越多的开发者希望在本地环境中部署和调用 AI 模型,以满足特定的业务需求。本文将详细介绍如何在本地环境中使用 Ollama 配置 DeepSeek 模型,并在 IntelliJ IDEA 中创建一个 Spring Boot 项目来调用该模型…...
2025年渗透测试面试题总结- 阿某云安全实习(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 阿里云安全实习 一、代码审计经验与思路 二、越权漏洞原理与审计要点 三、SSRF漏洞解析与防御 四、教…...
WHAT - 前端异步事件流处理场景梳理
目录 一、典型场景二、解决方案与技术选型1. 基础异步控制2. 状态管理方案3. 复杂任务调度4. 任务取消机制5. 微任务队列优化 三、最佳实践建议四、工具链推荐 前端异步任务流处理是现代Web开发中常见的需求,尤其在复杂业务逻辑、高交互性应用中不可或缺。以下是常见…...
PHP 包含(Include)机制详解
PHP 包含(Include)机制详解 在PHP编程中,include和require是两个非常基础的函数,用于在脚本中包含其他文件。它们在模块化编程中发挥着至关重要的作用,使得代码更易于维护和扩展。本文将详细介绍PHP的包含机制,包括其工作原理、使用方法以及最佳实践。 一、PHP 包含机制…...
Metal学习笔记十:光照基础
光和阴影是使场景流行的重要要求。通过一些着色器艺术,您可以突出重要的对象、描述天气和一天中的时间并设置场景的气氛。即使您的场景由卡通对象组成,如果您没有正确地照亮它们,场景也会变得平淡无奇。 最简单的光照方法之一是 Phong 反射模…...
MongoDB 高级索引
MongoDB 高级索引 摘要 在数据库管理中,索引是提高查询效率的关键因素。MongoDB,作为一款流行的NoSQL数据库,其索引功能尤为强大。本文将深入探讨MongoDB的高级索引特性,包括复合索引、部分索引、文本索引、地理空间索引等,旨在帮助数据库管理员和开发者更好地利用Mongo…...
从DNS到TCP:DNS解析流程和浏览器输入域名访问流程
1 DNS 解析流程 1.1 什么是DNS域名解析 在生活中我们会经常遇到域名,比如说CSDN的域名www.csdn.net,百度的域名www.baidu.com,我们也会碰到IP,现在目前有的是IPV4,IPV6。那这两个有什么区别呢?IP地址是互联网上计算机…...
【JQuery—前端快速入门】JQuery 基础语法
JQuery JQuery是一个快速、简洁且功能丰富的JavaScript框架; 1. 引入依赖 使用JQuery需要先引入对应的库; 在使用 JQuery CDN 时,只需要在 HTML 文档中加入如下代码 <script src"https://code.jquery.com/jquery-3.7.1.min.js"></s…...
即梦AI发布新数字人模型OmniHuman-1
简介 随着人工智能技术的发展,特别是深度学习和自然语言处理的进步,AI在内容创作领域的应用越来越广泛。字节跳动作为一家领先的科技公司,一直在探索如何利用AI技术来提升用户体验和创造力。OmniHuman-1模型正是在这种背景下诞生的ÿ…...
ARM CM3核 压栈流程
STM32F103 使用 ARM Cortex-M3 内核,与 STM32F013(Cortex-M0)相比,其压栈行为有所不同,主要体现在异常自动压栈和**手动压栈(函数调用)**两方面。 1. 进入异常/中断时的自动压栈 当 STM32F103 …...
WHAT - RxJS 异步事件流处理
目录 RxJS 关键概念简单示例常用操作符1. 创建 Observables2. 转换操作符(map)3. 过滤操作符(filter)4. 合并多个流(mergeMap) 适用于 React & TypeScriptReact 组件中使用 RxJS RxJS 是一个用于处理异…...
vue组合式API中prop
*一、了解(事件与$emit) 一个组件需要显示声明它所接受的props,这样才知道外部传入的那些是props,那些是透传attribute。 在<script setup>单文件组件中,props可以使用defineProps()宏来声明,defineProps 是一个仅 <script setup> 中可用的编译宏命令,并不需…...
【HarmonyOS Next】自定义Tabs
背景 项目中Tabs的使用可以说是特别的频繁,但是官方提供的Tabs使用起来,存在tab选项卡切换动画滞后的问题。 原始动画无法满足产品的UI需求,因此,这篇文章将实现下面页面滑动,tab选项卡实时滑动的动画效果。 实现逻…...
算法 并查集
目录 前言 一 并查集的思路 二 并查集的代码分析 三 实操我们的代码 四 并查集的代码优化 总结 前言 并查集主要是用来求解集合问题的,用来查找集合还有就是合并集合,可以把这个运用到最小生成树里面 一 并查集的思路 1 并查集的相关的操作…...
EP 架构:未来主流方向还是特定场景最优解?
DeepSeek MoE架构采用跨节点专家并行(EP)架构,在提升推理系统性能方面展现出巨大潜力。这一架构在发展进程中也面临诸多挑战,其未来究竟是会成为行业的主流方向,还是仅适用于特定场景,成为特定领域的最优解…...
记忆化搜索与动态规划:原理、实现与比较
记忆化搜索和动态规划是解决优化问题的两种重要方法,尤其在处理具有重叠子问题和最优子结构性质的问题时非常有效。 目录 1. 记忆化搜索(Memoization) 定义: 实现步骤: 示例代码(斐波那契数列࿰…...
LLMR//https://github.com/microsoft/llmr?locale=zh-cn
https://github.com/microsoft/llmr?localezh-cn Introduction 这个 repo 包含 LLMR 中描述的代码,实现了混合现实框架的大型语言模型。 此软件包是“用语言创造世界”的原型,它允许通过自然语言实时创建具有视觉、行为和交互元素的对象、工具和场景…...
Free Auto Clicker - 在任意位置自动重复鼠标点击
“想让鼠标自己动起来,解放双手去做更有趣的事?”Free Auto Clicker 就像你的数字小助手,能在任意位置自动重复点击鼠标。从玩游戏到刷网页,这款免费工具让你告别枯燥的重复操作,效率瞬间起飞! 你有没有想…...
高考數學。。。
2024上 具体来说,直线的参数方程可以写为: x1t y−t z1t 二、简答题(本大题共5小题,每小题7分,共35分。) 12.数学学习评价不仅要关注结果评价,也要关注过程评价。简要说明过程评价应关注哪几个方面。…...
MWC 2025|紫光展锐联手美格智能发布5G通信模组SRM812
在2025年世界移动通信大会(MWC 2025)期间,紫光展锐携手美格智能正式推出了基于紫光展锐V620平台的第二代5G Sub6G R16模组SRM812,以超高性价比方案,全面赋能合作伙伴,加速5G规模化应用在各垂直领域的全面落…...
5分钟快速搭建一个 SpringBoot3 + MyBatis-Plus 工程项目
环境 idea 2023.3.5 jdk 17 mysql 8 创建SpringBoot工程 创建SpringBoot工程,这里有两种方式可选,一种是使用idea提供的Spring Initializr自动创建,一种是通过Maven Archetype手动创建 自动创建SpringBoot工程 使用Spring Initializr创建…...
深度学习-大白话解释循环神经网络RNN
目录 一、RNN的思想 二、RNN的基本结构 网络架构 关键点 三、RNN的前向传播 四、RNN的挑战:梯度爆炸和梯度消失 问题分析 示例推导 五、LSTM:RNN的改进 核心组件 网络架构 3. LSTM 的工作流程 4. 数学公式总结 5. LSTM 的优缺点 优点 缺点 6. LSTM 的…...
20.<Spring图书管理系统①(登录+添加图书)>
PS:关于接口定义 接口定义,通常由服务器提供方来定义。 1.路径:自己定义 2.参数:根据需求考虑,我们这个接口功能完成需要哪些信息。 3.返回结果:考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…...
windows下使用Hyper+wsl实现ubuntu下git的平替
文章目录 前言一、安装Hyper、wsl1. 安装Hyper2. 安装wsl 二、配置Hyper三、安装并使用git总结 前言 众所周知,Ubuntu下安装git只需执行sudo apt install git即可使用默认终端拉取代码,但是Windows上使用git既没有linux便捷,又没有MacOS优雅…...
Python在实际工作中的运用-提取Pdf文件内容
Pdf文件是我们日常工作中经常会遇到的一种文件格式,对于这种文件的提取 pdfplumber 库可以非常出色的完成处理工作,它是一个纯 Python 第三方库,适合 python 3.x 版本,通常用来查看pdf各类信息,能有效提取文本、表格&…...
Python+Vue+数据可视化的考研知识共享平台(源码+论文+讲解+安装+调试+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 程序介绍 近些年来,科技以一种近乎狂飙突进的态势呈爆发式发展,成果之丰硕…...
VirtualBox虚拟机MacOS从Big Sur升级到Sequoia(失败)
VirtualBox虚拟机里安装好Big Sur版本,尝试升级到Sequoia,但是最终失败了。 软件升级 直接在系统偏好-软件更新里可以看到提示,提示可以升级到15版本Sequoia 点击同意,看能不能升级到Sequoia吧。升级前先用时光做了备份。 升级…...
深度学习---卷积神经网络
一、卷积尺寸计算公式 二、池化 池化分为最大池化和平均池化 最常用的就是最大池化,可以认为最大池化不需要引入计算,而平均池化需要引出计算(计算平均数) 每种池化还分为Pooling和AdaptiveAvgPool Pooling(2)就是每2*2个格子…...
深入解析网络协议:从OSI七层模型到HTTP与TCP/IP的关系
在网络的世界里,理解不同协议如何协同工作以实现高效、可靠的通信至关重要。无论是构建动态的Web应用,还是进行复杂的网络编程,对基础协议的理解都是不可或缺的。本文首先介绍OSI七层模型,这是一个为网络系统设计提供通用参考框架…...
链表-相关面试算法题
目录 面试题 02.04. 分割链表 面试题 02.05. 链表求和 面试题 02.06. 回文链表 面试题 02.07. 链表相交 面试题 02.04. 分割链表 面试题 02.04. 分割链表 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点…...
CSS Overflow 属性详解
CSS Overflow 属性详解 在网页设计和开发中,CSS Overflow 属性是一个非常重要的特性,它决定了当内容超出其容器大小时应该如何处理。本文将详细介绍 CSS Overflow 属性的相关知识,包括其语法、作用、常用属性值以及一些实际应用场景。 1. CSS Overflow 属性概述 CSS Over…...
一、MySQL备份恢复
一、MySQL备份恢复 1.1 MySQL日志管理 数据库中数据丢失或被破坏可能原因 误删除数据库 数据库工作时,意外断电或程序意外终止 由于病毒造成的数据库损坏或丢失 文件系统损坏后,系统进行自检操作 升级数据库时,命令语句不严格 设备故…...
Python-04BeautifulSoup网络爬虫
2025-03-04-BeautifulSoup网络爬虫 记录BeautifulSoup网络爬虫的核心知识点 文章目录 2025-03-04-BeautifulSoup网络爬虫 [toc]1-参考网址2-学习要点3-核心知识点1. 安装2. 导入必要的库3. 发送 HTTP 请求4. 创建 BeautifulSoup 对象5. 解析 HTML 内容5.1 查找标签5.2 根据属性…...
记录uniapp小程序对接腾讯IM即时通讯无ui集成(2)
完成以上步骤之后开始进行登录,登陆就需要账号。这个账号我们可以在腾讯云中创建。 有了账号之后开始去小程序进行登陆操作。腾讯云接口文档 这里除了帐号还需要一个校验值userSig正常项目开发这个字段可以在登陆后让后端返回,现在是测试我们直接去控制…...
DE2115实现4位全加器和3-8译码器(FPGA)
一、配置环境 1、Quartus 18.1安装教程 软件:Quartus版本:Quartus 18.1语言:英文大小:5.78G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高) 下载通道①百度网盘丨64位下载…...
大白话面试中应对自我介绍
在面试中,自我介绍是开场的关键环节,它就像你递给面试官的一张“个人名片”,要让面试官快速了解你并对你产生兴趣。下面详细讲讲应对自我介绍的要点及回答范例。 一、自我介绍的时间把控 一般面试中的自我介绍控制在1 - 3分钟比较合适。时间…...
【JavaScript—前端快速入门】JavaScript 综合案例 — 猜数字
JavaScript 综合案例—猜数字 预期效果 需求 完成基本的页面布局在文本框输入数字后,点击"猜"按钮,结果那一行会显示"猜大了"或者"猜小了"每猜一次,就会增加一次猜的次数猜到数字后,结果显示要猜的…...