首页 > 其他分享 >如何在NET 6.0使用结构化的日志系统

如何在NET 6.0使用结构化的日志系统

时间:2023-03-10 11:47:57浏览次数:50  
标签:Sinks Serilog app serilog 6.0 NET 日志

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

天下国家,可均也;爵禄,可辞也;白刃,可蹈也;中庸不可能也   转 https://www.cnblogs.com/PatrickLiu/p/16753606.html

标签:Sinks,Serilog,app,serilog,6.0,NET,日志
From: https://www.cnblogs.com/wl-blog/p/17202823.html

相关文章

  • .net core 项目内网IP访问设置
     修改applicationhost.config文件夹,增加一条电脑IP访问地址(记得IP需要更换为自己电脑IP,端口和localhost相同)<bindings> <bindingprotocol="http"bindingInfo......
  • 09-应用层-DNS&FTP&Telnet
    1.应用层在前五章我们已经详细地讨论了计算机网络提供通信服务的过程。但是我们还没有讨论这些通信服务是如何提供给应用进程来使用的。本章讨论各种应用进程通过什么样......
  • .NET的RulesEngine(规则引擎)使用
    本文目录1、背景说明1.1规则引擎的使用场景1.2demo的代码说明2、演示2.1入门demo演示2.1.1代码展示2.1.2代码下载2.2规则参数说明2.2.1第一部分参数说明2.2.2第二......
  • 日志框架之日志门面SLF4J的使用
    (日志框架之日志门面SLF4J的使用)SLF4J概述SLF4J(SimpleLoggingFacadeforJava)是一种Java编程语言的日志门面(loggingfacade)。它提供了一种将应用程序代码与特定......
  • netcore 上传文件
    一般上传文件可以用formdata的文件格式将你要上传的文件和其他参数放在一个类里面例如:publicclassuploadItemFile{publicintid{get;set;}publicF......
  • kaldi在linux上编译,Ubuntu 12.04下编译安装Kaldi https://blog.csdn.net/we
    因为同事工作需要kaldi,所以安装过程有点麻烦。在此记录一下折腾的过程。OS:Ubuntu 12.04(amd64)kaldi的下载地址 http://svn.code.sf.net/p/kaldi/code/ 我这里下......
  • ASP.NET Core - 配置系统之配置添加
    2.配置添加配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到ASP.NETCore入口文件中,builder(WebApplicationBui......
  • 如何在 Net6.0 中对 WebAPI 进行 JWT 认证和授权
    一、简介我们做微服务开发,或者说做分布式开发,有一项技术我们是避不开的,那就是WebAPI,在Net6.0中,有两类WebAPI,一类是极简WebAPI,它砍掉了很多冗余的东西,更纯粹的是......
  • ASP.NET Core - 配置系统之配置读取
    一个应用要运行起来,往往需要读取很多的预设好的配置信息,根据约定好的信息或方式执行一定的行为。配置的本质就是软件运行的参数,在一个软件实现中需要的参数非常多,如果我们......
  • 使用ControlNet 控制 Stable Diffusion
    本文将要介绍整合HuggingFace的diffusers包和ControlNet调节生成文本到图像,可以更好地控制文本到图像的生成ControlNet是一种通过添加额外条件来控制扩散模型的神经网络......