在我们的系统里面,有一项技术是必须使用的,那就是日志记录。我们在调试系统或者跟踪系统运行情况,都可以通过日志了解具体的情况。在项目开发中,我们有可能使用系统本身所带的日志系统,也有可能使用第三方日志框架来记录日志,首先一般基础的内置日志记录器在第三方日志框架中都有实现,然后很多第三方日志框架在功能上更强大和丰富,能满足我们更多的项目分析和诊断的需求。常用的有log4net,更复杂的ELK,项目中有用到Exceptionless。下面说的是Serilog:

  首先建个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使用结构化的日志系统的更多相关文章

  1. 基于ELK Stack7.1.0构建多用户安全认证日志系统

    ​ 配置tls加密通信及身份验证,主要目的是为了确保集群数据安全.在es早期版本,安全认证相关功能都属于商业付费服务,一般普通公司如果集群部署在内网,基本上就忽略了这些安全认证,当然也可以通过Ngin ...

  2. 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志

    前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...

  3. Asp.Net Core中利用Seq组件展示结构化日志功能

    在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...

  4. 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?

    上文我们演示了使用NLog向ElasticSearch写日志的基本过程(输出的是普通文本日志),今天我们来看下如何向ES输出结构化日志.并利用Kibana中分析日志. NLog输出结构化日志 Elas ...

  5. 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 ...

  6. 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 ...

  7. 全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门解析非结构化数据应用——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  8. 结构化您的Python工程

    我们对于"结构化"的定义是您关注于怎样使您的项目最好地满足它的对象性,我们 需要去考虑如何更好地利用Python的特性来创造简洁.高效的代码.在实践层面, "结构化&qu ...

  9. Shell 更多结构化命令(流程控制)

    更多的结构化命令 上一章里,你看到了如何通过检查命令的输出和变量的值来改变 shell 脚本程序的流程.本章会继续介绍能够控制 shell 脚本流程的结构化命令.你会了解如何重复一些过程和命令,也就是 ...

  10. Shell脚本结构化-控制流

    脚本结构化命令 上一章给出的那些 shell 脚本里,shell 按照命令在脚本中出现的顺序依次进行处理.对顺序操作来说,这已经足够了,因为在这种操作环境下,你想要的就是所有的命令按照正确的顺序执行. ...

随机推荐

  1. cannot import name '_BindParamClause' from 'sqlalchemy.sql.expression'

    python3.8 安装环境组件正常安装 运行 flask db init 报错 cannot import name '_BindParamClause' from 'sqlalchemy.sql. ...

  2. Html5学习内容-4

    (一)display与visibility 这里主要控制元素是否显示 例子 visibility:文字消失空间保留 <!DOCTYPE html> <html lang=" ...

  3. html-7(JavaScript-1)

    放在函数里面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  4. 节能减排 | AIRIOT智慧工厂节能管理解决方案

    工厂作为高能耗的生产型企业,降低能耗和提升资源利用率方面就显得很重要,对实施国家倡导的节能降耗.绿色发展有着很大程度上的必要性.然而,工厂能源管理从传统手段向智能化升级转型的过程中,企业也不可避免的面 ...

  5. UIPath变量和参数

    一. UIPath变量   变量(Variables),变量是所有编程语言中必不可少的部分.对于UIPath来说自然也是如此,其承载了我们RPA流程中数据传递的重要作用.对于接触过编程的开发者来说,变 ...

  6. 我最喜欢的白版应用,AI加持的新功能开源!强烈推荐

    Excalidraw 把他们的文本到图表的功能开源了 Excalidraw是一个虚拟白板应用,专门用于绘制类似手绘的图表.它提供了一个无限的.基于画布的白板,具有手绘风格,支持多种功能. 之前我分享的 ...

  7. out.print()

    在学习过程中发现跟着视频打out.print报错 查阅资料知道 新建Java工程时,应选择Java Enterprise而非Java里的webapplication(Java Enterprise会自 ...

  8. 数据库同步工具,PanguSync后起之秀

    随着数字化时代的快速发展,数据已经成为企业运营的核心.为了确保数据的准确性和一致性,数据库同步工具成为了企业不可或缺的工具.而在众多数据库同步工具中,PanguSync以其卓越的性能和强大的功能,逐渐 ...

  9. 解决k8s删除pod后又重新创建了新的pod

    1.问题现象 2.原因 在Kubernetes中,当你删除一个Pod时,如果该Pod是由Deployment.ReplicaSet或PodController创建的,那么这个Pod会被标记为" ...

  10. Maven仓库settings.xml配置信息

    找到你的settings.xml配置文件E:\maven3.6.3\apache-maven-3.6.3\conf # 你的本地依赖仓库路径 <localRepository>E:\mav ...