it编程 > 编程语言 > Asp.net

C# Serilog 日志的使用小结

28人参与 2025-08-13 Asp.net

serilog 的基本概念

日志级别

serilog 支持多种日志级别,从低到高依次是:

日志输出目标(sink)

serilog 支持多种日志输出目标,例如:

安装serilog

c# 项目中使用 serilog,首先需要安装相关的 nuget 包。以下是一些常用的 serilog 包:

配置serilog

程序代码中配置

在代码中直接配置 serilog 是最直接的方式。以下是一个简单的示例:

using serilog;
using serilog.sinks.file;

class program
{
    static void main(string[] args)
    {
        // 配置日志
        log.logger = new loggerconfiguration()
            .minimumlevel.debug() // 设置最低日志级别
            .writeto.console()    // 输出到控制台
            .writeto.file("logs/log.txt", rollinginterval: rollinginterval.day) // 输出到文件,按天滚动
            .createlogger();

        // 写入日志
        log.information("this is an information message.");
        log.warning("this is a warning message.");
        log.error("this is an error message.");

        // 关闭日志
        log.closeandflush();
    }
}

通过配置文件配置

serilog 也支持通过配置文件(如 appsettings.json)进行配置,这种方式更加灵活。首先需要安装 serilog.settings.configuration 包:
然后在 appsettings.json 文件中配置 serilog

{
  "serilog": {
    "minimumlevel": "debug",
    "writeto": [
      {
        "name": "console"
      },
      {
        "name": "file",
        "args": {
          "path": "logs/log.txt",
          "rollinginterval": "day"
        }
      }
    ]
  }
}

在程序中加载配置文件并初始化 serilog

using microsoft.extensions.configuration;
using serilog;

class program
{
    static void main(string[] args)
    {
        // 加载配置文件
        var configuration = new configurationbuilder()
            .addjsonfile("appsettings.json")
            .build();

        // 配置 serilog
        log.logger = new loggerconfiguration()
            .readfrom.configuration(configuration)
            .createlogger();

        // 写入日志
        log.information("this is an information message.");
        log.warning("this is a warning message.");
        log.error("this is an error message.");

        // 关闭日志
        log.closeandflush();
    }
}

常见配置选项

日志级别

可以通过 minimumlevel 设置最低日志级别,低于该级别的日志将不会被记录。例如:

log.logger = new loggerconfiguration()
    .minimumlevel.warning() // 只记录 warning 及以上级别的日志
    .createlogger();

文件日志

文件日志是常用的日志输出方式。serilog 提供了丰富的文件日志配置选项,例如:

log.logger = new loggerconfiguration()
    .writeto.file("logs/log.txt", rollinginterval: rollinginterval.day, retainedfilecountlimit: 7)
    .createlogger();

控制台日志

控制台日志可以实时显示日志信息,方便调试。可以通过以下方式配置控制台日志:

log.logger = new loggerconfiguration()
    .writeto.console(outputtemplate: "[{timestamp:hh:mm:ss} {level}] {message}{newline}{exception}")
    .createlogger();

其中,outputtemplate 可以自定义日志的输出格式。

数据库日志

serilog 支持将日志输出到多种数据库,例如 sql servermysql 等。以下是将日志输出到 sql server 数据库的示例:

log.logger = new loggerconfiguration()
    .writeto.mssqlserver(
        connectionstring: "server=your_server;database=your_database;user id=your_user;password=your_password;",
        tablename: "logs",
        autocreatesqltable: true)
    .createlogger();

在数据库中,serilog 会自动创建一个日志表(如 logs),并存储日志信息。

使用serilog在asp.net core中

serilog 也可以与 asp.net core 集成,为 web 应用程序提供日志功能。以下是一个集成的示例:

安装nuget包

安装以下 nuget 包:

配置serilog

program.cs 文件中配置 serilog

using serilog;

var builder = webapplication.createbuilder(args);

// 配置 serilog
log.logger = new loggerconfiguration()
    .minimumlevel.debug()
    .writeto.console()
    .writeto.file("logs/log.txt", rollinginterval: rollinginterval.day)
    .createlogger();

builder.host.useserilog();

var app = builder.build();

app.mapget("/", () => "hello world!");

app.run();

asp.net core 中,serilog 会自动记录应用程序的生命周期事件(如启动、停止)以及中间件的日志。

日志上下文

serilog 支持日志上下文,可以在日志中添加上下文信息,例如用户 id、请求 id 等。以下是一个示例:

using serilog;
using serilog.context;

log.logger = new loggerconfiguration()
    .writeto.console()
    .createlogger();

using (logcontext.pushproperty("userid", 12345))
{
    log.information("user {userid} performed an action.", 12345);
}

在日志中,userid 将作为上下文信息被记录。

总结

serilog 是一个功能强大且灵活的日志库,适用于各种 .net 应用程序。它支持多种日志输出目标和丰富的配置选项,可以满足不同的日志需求。通过合理配置 serilog,可以方便地记录应用程序的运行日志,帮助开发人员进行调试和问题排查。

到此这篇关于c# serilog 日志的使用小结的文章就介绍到这了,更多相关c# serilog 日志内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

C# Opacity 不透明度的具体使用

08-13

C#中SortedSet的具体使用

08-13

使用c#进行串口通信的实现示例

08-13

C#和Unity中的解释器模式使用方式

08-14

C#和Unity中的中介者模式使用方式

08-14

如何选到你的芯动之选?一文读懂英特尔 Intel Core i3、i5、i7和i9处理器

08-14

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论