Asp.Net Core 8.0 使用 Serilog 按日志级别写入日志文件的两种方式

embedded/2025/1/19 18:34:15/

1、所需的Nuget包

        本文项目的版本是.NET 8.0,如果使用其它版本安装适配版本即可。

Serilog.AspNetCore(8.0.2)

Serilog.Sinks.File(5.0.0)

Serilog.Expressions(5.0.0)

2、两种配置方式

2.1 代码形式(Program.cs)

    在Program.cs文件中,添加如下代码

//设置Serilog为日志管理
builder.Host.UseSerilog((context, loggerConfiguration) =>
{
    loggerConfiguration.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)//最小日志级别
        .Enrich.FromLogContext()
        
        .WriteTo.Console()//输出到控制台
        
        //按日志级别分别写入不同的日志文件中(可设置参数outputTemplate模板,有默认这里就不设置了)
        .WriteTo.Logger(configure => configure
             .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information)//过滤
             .WriteTo.File("Logs/Info/info.txt", rollingInterval: RollingInterval.Day))
        
        .WriteTo.Logger(configure => configure
             .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning)//过滤
             .WriteTo.File("Logs/Warn/warn.txt", rollingInterval: RollingInterval.Day))
        
        .WriteTo.Logger(configure => configure
             .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)//过滤
             .WriteTo.File("Logs/Error/error.txt", rollingInterval: RollingInterval.Day));
});
 

2.2 配置文件形式(appsetting.json)

    2.2.1、appsetting.json文件添加如下配置信息

"Serilog": {
  "Using": [ "Serilog.Sinks.File" ],
  "MinimumLevel": {
    "Default": "Information",//默认日志输出级别
    "Override": {
      "Microsoft": "Warning",
      "System": "Warning"
    }
  },
  "WriteTo": [

    { "Name": "Console" },//输出到控制台

    {//info
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "Filter": [//过滤
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "@l = 'Information'"
              }
            }
          ],
          "WriteTo": [//写入
            {
              "Name": "File",
              "Args": {
                "path": "Logs/Info/info.txt",
                "rollingInterval": "Day",
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}] {SourceContext}: {Message}{NewLine}{Exception}{NewLine}"
              }
            }
          ]
        }
      }
    },

    {//warning
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "Filter": [
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "@l = 'Warning'"
              }
            }
          ],
          "WriteTo": [
            {
              "Name": "File",
              "Args": {
                "path": "Logs/Warn/warn.txt",
                "rollingInterval": "Day",
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}] {SourceContext}: {Message}{NewLine}{Exception}{NewLine}"
              }
            }
          ]
        }
      }
    },

    {//error
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "Filter": [
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "@l = 'Error'"
              }
            }
          ],
          "WriteTo": [
            {
              "Name": "File",
              "Args": {
                "path": "Logs/Error/error.txt",
                "rollingInterval": "Day",
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}] {SourceContext}: {Message}{NewLine}{Exception}{NewLine}"
              }
            }
          ]
        }
      }
    }
  ],
  "Enrich": [ "FromLogContext", "WithThreadId" ]
}
 

2.2.2、在Program.cs文件中添加如下代码进行Serilog的注册使用 

//设置Serilog为日志管理
builder.Host.UseSerilog((context, loggerConfiguration) =>
{
    //读取配置文件中Serilog配置信息
    loggerConfiguration.ReadFrom.Configuration(context.Configuration);
});
 

3、实现效果如下

    Logs/Info/info.txt 指定的日志文件路径是位于项目根路径下

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。  


http://www.ppmy.cn/embedded/155291.html

相关文章

rabbitmq安装延迟队列

在RabbitMQ中,延迟队列是一种特殊的队列类型。当消息被发送到此类队列后,不会立即投递给消费者,而是会等待预设的一段时间,待延迟期满后才进行投递。这种队列在多种场景下都极具价值,比如可用于处理需要在特定时间触发…

Uniapp判断设备是安卓还是 iOS,并调用不同的方法

在 UniApp 中,可以通过 uni.getSystemInfoSync() 方法来获取设备信息,然后根据系统类型判断当前设备是安卓还是 iOS,并调用不同的方法。 示例代码 export default {onLoad() {this.checkPlatform();},methods: {checkPlatform() {// 获取系…

SQL刷题快速入门(三)

其他章节: SQL刷题快速入门(一) SQL刷题快速入门(二) 承接前两个章节,本系列第三章节主要讲SQL中where和having的作用和区别、 GROUP BY和ORDER BY作用和区别、表与表之间的连接操作(重点&…

【Docker】——安装Docker以及解决常见报错

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

C# 开发aspx文件中js获取<asp:label>的数值

想要实现功能&#xff1a;依据窗口的某些参数&#xff0c;打开新窗口来展示其详细信息。 尝试了以下的三种方法&#xff0c;最终还是选择了【第一种】&#xff0c;剩下两种没有实现。 一、通过<a>标签的方式 在合适的位置&#xff0c;通过<a οnclick"OpenDet…

在 JIRA 中利用仪表盘功能生成 Bug 相关图表的手册

引言 JIRA 是 Atlassian 推出的项目管理工具&#xff0c;广泛应用于软件开发、团队协作和问题跟踪。对于开发团队和项目经理而言&#xff0c;能够清晰地了解当前 Bug 状态、优先级分布及进展情况至关重要。JIRA 提供了强大的 仪表盘功能&#xff0c;让用户能够通过各种图表直观…

haproxy+httpd网站架构,实现负载均衡实验笔记

前提准备&#xff1a; 两台httpd&#xff0c;一台haproxy&#xff0c;NFS部署在任意一台httpd上http1&#xff1a;192.168.180.110http2&#xff1a;192.168.180.120&#xff0c;NFShaproxy&#xff1a;192.168.180.100 http&#xff08;两台httpd的操作是一样的&#xff09;…

phaserjs+typescript游戏开发之camera实现

以下是一个使用 Phaser.js 和 TypeScript 实现的示例&#xff0c;包含玩家移动、摄像机跟随并限制在游戏世界范围内的基本功能。 TypeScript 和 Phaser.js 实现的完整代码 安装 Phaser.js&#xff08;使用 npm&#xff09; 首先&#xff0c;确保你已经安装了 Node.js 和 npm…