当前位置: 首页 > article >正文

ASP .NET Core 学习(.NET9)Serilog日志整合

Serilog 是一个功能强大的 .NET 日志库,以其简洁的配置和灵活的输出方式而受到开发者喜爱。支持多种日志输出目标(如控制台、文件、数据库等),并且可以通过结构化日志的方式记录丰富的上下文信息,便于后续的日志分析和调试。Serilog 还提供了丰富的扩展包,能够轻松集成到各种 .NET 应用程序中,帮助开发者高效地管理和记录日志,这里我们选用控制台输出和文件输出日志即可满足大部分业务需求。

一、NuGet 安装

// 核心库
Serilog	
// AspNetCore中使用Serilog	
Serilog.AspNetCore	
// 控制台输出
Serilog.Sinks.Console
// 日志文件输出
Serilog.Sinks.File

二、配置 Serilog

Program.cs中的Main方法中添加如下代码

public static void Main(string[] args)
{
  var builder = WebApplication.CreateBuilder(args);
  //...
  #region 配置 Serilog

  Log.Logger = new LoggerConfiguration()
       .MinimumLevel.Information() // 设置最低日志级别为 Info
       .WriteTo.Console()   // 输出到控制台
       // 输出到运行目录的Serilog文件夹下,按天分割 20250101.txt
       .WriteTo.File(AppContext.BaseDirectory + "/Serilog/.txt", rollingInterval: RollingInterval.Day) 
       .CreateLogger();

  Log.Information("Serilog 已配置完成。");

  // 配置Serilog为Log;
  builder.Host.UseSerilog();

  var app = builder.Build();
  //...
}

删除 appsetting.json 配置文件中的 Logging 配置节点

三、使用

Controllers文件夹下,新建SysLogController,内容如下:

[ApiController]
[Route("[controller]")]
[ApiExplorerSettings(GroupName = "v1")] // 配置接口属于v1的swagger文档
public class SysLogController : ControllerBase
{
    private readonly ILogger<SysLogController> _logger;

    public SysLogController(ILogger<SysLogController> logger)
    {
    	// 使用容器中的日志组件,经过前面的配置,日志已经变更为Serilog了
        _logger = logger;
    }

    [HttpGet]
    public string WhiteLog() 
    {
        _logger.LogWarning("这是一条报警信息");
        _logger.LogInformation("这是一条信息");
        _logger.LogError("这是一条错误信息");

        return "操作成功";
    }
}

在浏览器或者调试工具中访问
http://localhost:5000/SysLog
看下控制台输出一下内容:
在这里插入图片描述
同时运行目录下有如下文件:
在这里插入图片描述
在这里插入图片描述
即完成配置要求,之后需要在输出日志的地方进行使用即可,如需要将日志输出到数据库中,Serilog也提供了多个Sink包,大家自行查找即可


http://www.kler.cn/a/573160.html

相关文章:

  • 什么是XSS
  • 【每日学点HarmonyOS Next知识】web滚动、事件回调、selectable属性、监听H5内部router、Grid嵌套时高度设置
  • valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug
  • 算法比赛中处理输入和输出
  • docker:配置 Docker 镜像加速器
  • Mybatis中的设计模式
  • linux如何在某个文件夹下查看所有文件(层级只到当前文件夹的两层)并找到‘XXXX’ 这个单词
  • 基于 Next.js(前端)和 FastAPI(后端)使用 WebSocket(满血版DeepSeek-R1回答)
  • 大模型核心要素完全解析:从数字神经元到智能对话的奥秘
  • npm install 报错 ---- 忽略版本冲突
  • 消息系统队列(Message Queue)之kafka
  • TCP-UDP-WebSocket-组播-单播
  • unity文字转语音usherpa-onnx-tts
  • python-leetcode-零钱兑换 II
  • 【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分
  • MySQL零基础教程15—简单的表连接(join)
  • 外盘农产品期货数据:历史高频分钟回测的分享下载20250305
  • Linux--基本指令4(完结)和权限
  • 基于Windows11的DockerDesktop安装和布署方法简介
  • C# Unity 面向对象补全计划 之 索引器与迭代器