如何在NET 6.0使用结构化的日志系统
首先建个AspNetCoreWebAPI6.0的项目,当然也可以是AspNetCore Web MVC项目。

安装组件:Serilog.AspNetCore(6.0.1)和Serilog.Sinks.Seq(5.2.1)


Seq — centralized structured logs for .NET, Java, Node.js (datalust.co)

运行结果如下,已替换系统自带information:
1 using Serilog;
2 using Serilog.Events;
3
4 // Setup serilog in a two-step process. First, we configure basic logging
5 // to be able to log errors during ASP.NET Core startup. Later, we read
6 // log settings from appsettings.json. Read more at
7 // https://github.com/serilog/serilog-aspnetcore#two-stage-initialization.
8 // General information about serilog can be found at
9 // https://serilog.net/
10 Log.Logger = new LoggerConfiguration()
11 .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
12 .Enrich.FromLogContext()
13 .WriteTo.Console()
14 .CreateBootstrapLogger();
15
16 try
17 {
18 Log.Information("Starting the web host");
19 var builder = WebApplication.CreateBuilder(args);
20 // Full setup of serilog. We read log settings from appsettings.json
21 builder.Host.UseSerilog((context, services, configuration) => configuration
22 .ReadFrom.Configuration(context.Configuration)
23 .ReadFrom.Services(services)
24 .Enrich.FromLogContext());
25 // Add services to the container.
26
27 builder.Services.AddControllers();
28 // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
29 builder.Services.AddEndpointsApiExplorer();
30 builder.Services.AddSwaggerGen();
31
32 var app = builder.Build();
33
34 // Configure the HTTP request pipeline.
35 app.UseSerilogRequestLogging(configure =>
36 {
37 configure.MessageTemplate = "HTTP {RequestMethod} {RequestPath} ({UserId}) responded {StatusCode} in {Elapsed:0.0000}ms";
38 });
39 // Configure the HTTP request pipeline.
40 if (app.Environment.IsDevelopment())
41 {
42 app.UseSwagger();
43 app.UseSwaggerUI();
44 }
45
46 app.UseHttpsRedirection();
47
48 app.UseAuthorization();
49
50 app.MapControllers();
51
52 app.Run();
53 }
54 catch
55 (Exception ex)
56 {
57 Log.Fatal(ex, "Host terminated unexpexctedly");
58 }
59 finally
60 {
61 Log.CloseAndFlush();
62 }
1 {
2 //"Logging": {
3 // "LogLevel": {
4 // "Default": "Information",
5 // "Microsoft.AspNetCore": "Warning"
6 // }
7 //},
8 "Serilog": {
9 "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq" ],
10 "MinimumLevel": "Information",
11 // Where do we want to write our logs to? Choose from a large number of sinks:
12 // https://github.com/serilog/serilog/wiki/Provided-Sinks.
13 "WriteTo": [
14 {
15 "Name": "Console"
16 },
17 {
18 "Name": "File",
19 "Args": { "path": "Logs/log.txt" }
20 },
21 {
22 "Name": "Seq",
23 "Args": { "serverUrl": "http://localhost:8888" }
24 }
25 ],
26 "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
27 "Properties": {
28 "Application": "AspNetCoreSerilogDemo"
29 }
30 },
31 "AllowedHosts": "*"
32 }


请求跟踪分析:

using Microsoft.AspNetCore.Mvc; namespace AspNetCoreSerilogDemo.Controllers
{
[ApiController]
[Route("[controller]")]
public class SeriLogDemoController : ControllerBase
{ private readonly ILogger<SeriLogDemoController> _logger; public SeriLogDemoController(ILogger<SeriLogDemoController> logger)
{
_logger = logger;
} [HttpGet]
public string String()
{
_logger.LogInformation("this is serilog...");
return "Suscess";
} }
}


配置文件里面输出路径有"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq" ],所以同样会输出到日志文件中,指定路径和文件名:


更多更详细功能参考:
Serilog — simple .NET logging with fully-structured events
Seq — centralized structured logs for .NET, Java, Node.js (datalust.co)
如何在NET 6.0使用结构化的日志系统的更多相关文章
- 基于ELK Stack7.1.0构建多用户安全认证日志系统
配置tls加密通信及身份验证,主要目的是为了确保集群数据安全.在es早期版本,安全认证相关功能都属于商业付费服务,一般普通公司如果集群部署在内网,基本上就忽略了这些安全认证,当然也可以通过Ngin ...
- 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志
前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...
- Asp.Net Core中利用Seq组件展示结构化日志功能
在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...
- 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?
上文我们演示了使用NLog向ElasticSearch写日志的基本过程(输出的是普通文本日志),今天我们来看下如何向ES输出结构化日志.并利用Kibana中分析日志. NLog输出结构化日志 Elas ...
- Structured Streaming + Kafka Integration Guide 结构化流+Kafka集成指南 (Kafka broker version 0.10.0 or higher)
用于Kafka 0.10的结构化流集成从Kafka读取数据并将数据写入到Kafka. 1. Linking 对于使用SBT/Maven项目定义的Scala/Java应用程序,用以下工件artifact ...
- XHTML 结构化:使用 XHTML 重构网站 分类: C1_HTML/JS/JQUERY 2014-07-31 15:58 249人阅读 评论(0) 收藏
http://www.w3school.com.cn/xhtml/xhtml_structural_01.asp 我们曾经为本节撰写的标题是:"XHTML : 简单的规则,容易的方针.&qu ...
- 全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门解析非结构化数据应用——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...
- 结构化您的Python工程
我们对于"结构化"的定义是您关注于怎样使您的项目最好地满足它的对象性,我们 需要去考虑如何更好地利用Python的特性来创造简洁.高效的代码.在实践层面, "结构化&qu ...
- Shell 更多结构化命令(流程控制)
更多的结构化命令 上一章里,你看到了如何通过检查命令的输出和变量的值来改变 shell 脚本程序的流程.本章会继续介绍能够控制 shell 脚本流程的结构化命令.你会了解如何重复一些过程和命令,也就是 ...
- Shell脚本结构化-控制流
脚本结构化命令 上一章给出的那些 shell 脚本里,shell 按照命令在脚本中出现的顺序依次进行处理.对顺序操作来说,这已经足够了,因为在这种操作环境下,你想要的就是所有的命令按照正确的顺序执行. ...
随机推荐
- 浅谈一下go语言中的slice及其一些小坑
数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.虽然数组元素可以被修改,但是数组长度是固定的,而且在go语言中数组的长度也是数组类型的组成部分,所以不同长度或不同 ...
- Centos7安装msf
文章来自:https://blog.csdn.net/weixin_44268918/article/details/129771330 1. 前言在日常使用中,模拟攻击以及测试的时候都是直接使用本地 ...
- 使用 Appilot 部署 Llama2,会聊天就行!
Walrus 是一款基于平台工程理念的应用管理平台,致力于解决应用交付领域的深切痛点.借助 Walrus 将云原生的能力和最佳实践扩展到非容器化环境,并支持任意应用形态统一编排部署,降低使用基础设施的 ...
- 推理(Inference)与预测(Prediction)
在机器学习的背景下,很多人似乎混淆了这两个术语.这篇文章将试图澄清我们所说的这两个词是什么意思,每一个词在哪里有用,以及它们是如何应用的.在这里,我将举几个例子来直观地理解两者之间的区别. 推理和预测 ...
- [Python急救站课程]获取星期字符串
如何获取星期字符串 weekstr = "星期一星期二星期三星期四星期五星期六星期日" weekid = eval(input("请输入星期数字(1~7):") ...
- [Python急救站课程]等边三角形的绘制
等边三角形的绘制 from turtle import * penup() fd(-50) pendown() pensize(25) seth(60) fd(100) seth(-60) fd(10 ...
- 四载磨砺,一群青年“识瘤者”以AI助力医疗创新
本文分享自华为云社区<[先锋开发者云上说]四载磨砺,一群青年"识瘤者"以AI助力医疗创新>,作者:Gauss松鼠会小助手2 . 一群青年"识瘤者" ...
- 用友U8和旺店通·企业奇门单据接口对接
用友U8和旺店通·企业奇门单据接口对接 对接系统旺店通·企业奇门 旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化 ...
- super学习
2022-10-02 16:27:38 super super代表的是"当前对象(this)"的父类型特征 概念 1.super是一个关键字,全部小写. 2.super和this对 ...
- 深入解析C# List<T>的源码
前面的文章中解释了Array的初始化和元素插入,以及数组整体的存储结构(<深度分析C#中Array的存储结构>).这里我们再来详细的了解另一种存储结构List<T>, List ...