当前位置: 代码网 > it编程>编程语言>Asp.net > C# Serilog 日志的使用小结

C# Serilog 日志的使用小结

2025年08月13日 Asp.net 我要评论
serilog 的基本概念日志级别serilog 支持多种日志级别,从低到高依次是:verbose(详细):记录最详细的信息,通常用于调试。debug(调试):记录调试信息,比 verbose 稍低。

serilog 的基本概念

日志级别

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

  • verbose(详细):记录最详细的信息,通常用于调试。
  • debug(调试):记录调试信息,比 verbose 稍低。
  • information(信息):记录正常运行时的信息。
  • warning(警告):记录可能影响正常运行的警告信息。
  • error(错误):记录运行时的错误。
  • fatal(致命):记录导致应用程序崩溃的致命错误。

日志输出目标(sink)

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

  • 控制台(console
  • 文件(file
  • 数据库(如 sql servermysql
  • 云存储(如 azure blob storageaws s3
  • 日志聚合工具(如 elasticsearchseq

安装serilog

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

  • serilog:核心日志库。
  • serilog.sinks.console:将日志输出到控制台。
  • serilog.sinks.file:将日志输出到文件。
  • serilog.sinks.mssqlserver:将日志输出到 sql server 数据库。
  • serilog.settings.configuration:通过配置文件(如 appsettings.json)配置 serilog
    可以通过 nuget 包管理器安装这些包。

配置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.aspnetcore
  • serilog.sinks.console
  • serilog.sinks.file

配置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)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com