首页 > 其他分享 >在 .NET 8 中使用 Serilog:详细讲解与日志级别介绍

在 .NET 8 中使用 Serilog:详细讲解与日志级别介绍

时间:2024-11-01 10:32:59浏览次数:1  
标签:记录 Serilog Microsoft using NET 级别 日志

Serilog 是一个功能强大且灵活的日志记录库,特别适合在 .NET 8 应用程序中使用。它支持结构化日志记录,便于日志的查询和分析。本文将详细介绍在 .NET 8 中使用 Serilog 的方法,包括配置、日志级别的介绍和使用示例。

一、什么是 Serilog?

Serilog 是一个开源的结构化日志记录库,旨在简化日志的生成和管理。与传统的日志工具不同,Serilog 强调使用结构化数据,使日志更易于查询和分析。它可以将日志输出到多种目的地,包括控制台、文件、数据库等。

主要特点:

  • 结构化日志:以键值对的形式记录日志,使得日志数据更具可读性和可查询性。

  • 灵活配置:用户可以根据需求自定义输出格式和接收器。

  • 高性能:支持异步日志记录,适合高并发场景。

  • 丰富的扩展性:可以与多种日志管理工具和服务集成。

二、在 .NET 8 中安装 Serilog

首先,需要在 .NET 8 项目中安装 Serilog 相关的 NuGet 包。可以使用以下命令:

dotnet add package Serilog
dotnet add package Serilog.Extensions.Logging
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File

三、配置 Serilog

1. 在 Program.cs 文件中配置

在 .NET 8 应用程序的 Program.cs 文件中,您可以设置 Serilog 的日志记录配置。以下是一个完整的示例:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;

var builder = WebApplication.CreateBuilder(args);

// 读取配置
var configuration = builder.Configuration;

// 配置 Serilog
Log.Logger = new LoggerConfiguration()
  .ReadFrom.Configuration(configuration)
  .CreateLogger();

builder.Host.UseSerilog(); // 使用 Serilog

builder.Services.AddControllers();

var app = builder.Build();

try
{
   Log.Information("Starting up the application...");
   app.MapControllers();
   app.Run();
}
catch (Exception ex)
{
   Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
   Log.CloseAndFlush();
}

2. 在 appsettings.json 中配置 Serilog

您可以通过 appsettings.json 文件来配置 Serilog。以下是一个示例配置:

{
 "Serilog": {
   "MinimumLevel": "Debug",
   "WriteTo": [
    { "Name": "Console" },
    {
       "Name": "File",
       "Args": {
         "path": "logs/myapp.txt",
         "rollingInterval": "Day"
      }
    }
  ],
   "Overrides": {
     "Microsoft": "Warning"
  }
},
 "AllowedHosts": "*"
}

四、日志级别介绍

Serilog 定义了多种日志级别,用于表示日志信息的严重性。主要日志级别如下:

  1. Verbose:记录所有信息,包括调试和详细信息,通常用于开发阶段。

  2. Debug:用于开发和调试过程中的信息,帮助开发者理解代码的执行情况。

  3. Information:记录系统正常运行时的重要信息,如用户操作、系统状态等。

  4. Warning:表示潜在的问题或不正常的情况,提醒开发者注意。

  5. Error:记录错误信息,通常影响程序的某个功能,但程序仍可继续运行。

  6. Fatal:表示严重错误,通常会导致程序终止,需立即处理。

示例:设置日志级别

在配置中,可以设置最低日志级别,例如:

"MinimumLevel": "Information"

这会记录信息级别及以上的日志。您还可以为特定的命名空间设置覆盖:

"Overrides": {
 "Microsoft": "Warning"
}

五、记录日志

在配置完成后,您可以在应用程序中记录日志。以下是如何在控制器和服务中使用 Serilog 的示例。

1. 在控制器中记录日志

创建一个简单的 API 控制器,并记录日志信息:

using Microsoft.AspNetCore.Mvc;
using Serilog;

namespace MyApp.Controllers
{
  [ApiController]
  [Route("[controller]")]
   public class WeatherForecastController : ControllerBase
  {
      [HttpGet]
       public IActionResult Get()
      {
           Log.Information("Fetching weather data");
           // 业务逻辑...
           return Ok(new { Weather = "Sunny" });
      }
  }
}

2. 在服务中记录日志

在服务中使用构造函数注入 ILogger<T> 记录日志:

using Microsoft.Extensions.Logging;

namespace MyApp.Services
{
   public class WeatherService
  {
       private readonly ILogger<WeatherService> _logger;

       public WeatherService(ILogger<WeatherService> logger)
      {
           _logger = logger;
      }

       public void GetWeatherData()
      {
           _logger.LogInformation("Getting weather data");
           // 业务逻辑...
      }
  }
}

六、使用结构化日志

Serilog 的一个重要特性是支持结构化日志。通过结构化数据,您可以在日志中附加更多上下文信息,以便后续查询和分析:

var userId = 123;
Log.Information("User {UserId} has logged in", userId);

七、最佳实践

  1. 选择适当的日志级别:根据业务需要选择合适的日志级别,避免在生产环境中记录过多的调试信息。

  2. 使用结构化日志:尽量使用结构化日志来记录上下文信息,以便后续查询和分析。

  3. 定期检查日志:定期查看日志,关注 WarningError 级别的日志信息。

  4. 集中管理日志:考虑将日志集中到一个地方,例如数据库或日志管理工具,以便更好地监控和分析。

  5. 日志轮换和清理:使用文件滚动机制,防止日志文件过大,并定期清理旧日志。

八、总结

Serilog 是一个灵活且强大的日志记录库,适用于 .NET 8 应用程序。通过合理配置和使用不同的日志级别,您可以更好地监控应用程序的运行状态,快速定位和解决问题。在您的下一个项目中,尝试使用 Serilog,让日志记录变得更加高效和有意义。

标签:记录,Serilog,Microsoft,using,NET,级别,日志
From: https://www.cnblogs.com/forges/p/18519668

相关文章

  • .Net C# 基于EFCore的DBFirst和CodeFirst
    DBFirst和CodeFirst1概念介绍1.1DBFirst(数据库优先)含义:这种模式是先创建数据库架构,包括表、视图、存储过程等数据库对象。然后通过实体框架(EntityFramework)等工具,根据已有的数据库结构来生成对应的实体类和数据访问代码。应用场景:当已经存在一个成熟的数据库,例如从旧......
  • Virtual Private Network (VPN) Lab
    Task1:VMSetup使用上一个VPN的Labsetup包所构建的实验环境,所以这个任务就相当于是解决了。Task2:CreatingaVPNTunnelusingTUN/TAPStep1:自己构造tun_server.py,加权限并且在server上运行Step2:在HostU上构建tun_client.py,并运行tun_client.py文件:Step3......
  • Kubernetes集群证书过期解决方案:使用kubeadm为证书续期
    目录一.系统环境二.前言三.Kubernetes证书过期及续期简介四.使用kubeadm为Kubernetes集群证书续期4.1查看k8s集群证书过期时间4.2为master节点续期证书4.3为worker节点替换最新的证书五.总结一.系统环境本文主要基于Kubernetes1.22.2和Linux操作系统Ubuntu18.04。服务器......
  • 织梦(DedeCMS)日志文件的位置及查看方法
    日志文件位置织梦(DedeCMS)的日志文件通常存储在网站根目录下的 data/log文件夹中。具体路径如下: /你的网站根目录/data/log/查看日志文件的方法通过FTP客户端查看使用FTP客户端(如FileZilla)登录到您的网站服务器。导航到 data/log 文件夹。在该文件夹中,您会看到......
  • .NET 9 AOT的突破 - 支持老旧Win7与XP环境
    引言随着技术的不断进步,微软的.NET框架在每次迭代中都带来了令人惊喜的新特性。在.NET9版本中,一个特别引人注目的亮点是AOT(Ahead-of-Time)支持,它允许开发人员将应用程序在编译阶段就优化为能够在老旧的Windows系统上运行,包括Windows7和甚至WindowsXP。这不仅提升了......
  • 【深度学习】从公式推导来深入理解误差反向传播算法2:《深度学习入门基于Python的理论
    《深度学习入门基于Python的理论与实现》中实现了2层全连接神经网络的代码对MNIST数据集的28x28像素0-9手写数字灰度图像进行分类,本文将重点对代码中的two_layer_net类的gradient函数中的误差反向传播的代码进行公式推导验证。验证小批量数据的交叉熵损失函数对第2层权重......
  • UOS下配置.net core环境
    1.下载sdkhttps://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-8.0.403-linux-x64-binaries2.解压并拷贝到目标目录mkdir-p$HOME/dotnet&&tarzxfdotnet-sdk-8.0.403-linux-x64.tar.gz-C$HOME/dotnet3.安装geditsudoaptinstallgedit4.配置/etc/pro......
  • IIS 部署 .NET8/7/6/5
    以我公司所在的测试服务器为例:windowsserver2012、IIS7部署.NET8程序不出意外会报这个错:ThespecifiedversionofMicrosoft.NetCore.ApporMicrosoft.AspNetCore.Appwasnotfound.这是因为服务器没有安装HostingBundle在安装完HostingBundle之后,可能还会报如下......
  • COMP3331/9331 Computer Networks and Applications
    COMP3331/9331ComputerNetworksandApplicationsAssignmentforTerm3,2024Version1.1Due:11:59am(noon)Friday,8November2024(Week9)TableofContentsGOALANDLEARNINGOBJECTIVES....................................................................
  • Ethernet 系列(6)-- 基础学习::OSI Model
    (写在前面:最近在学习车载以太网的知识,顺便记录一下知识点。)OSI(OpenSystemInterconnect)模型是一种网络通信框架,由国际标准化组织(‌ISO)在1985年提出,旨在为不同制造商和技术提供商的网络设备和软件提供一个通用的兼容和通信标准。这个模型将复杂的网络通信过程分解为七个独......