C# 使用Serilog日志框架的方法

 更新时间:2023年11月25日 09:24:56   作者:广阔之海  
Serilog是一款配置方便,使用灵活的日志框架,这篇文章主要介绍了C# 使用Serilog日志框架,需要的朋友可以参考下

Serilog是一款配置方便,使用灵活的日志框架,使用方法如下:
1、日志输出到控制台,需要使用Nuget安装Serilog和Serilog.Sinks.Console两个包

// 初始化日志的共享实例
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .Enrich.FromLogContext()
                .WriteTo.Console()
                .CreateLogger();
            // 写入日志
            Log.Information("Info");

2、日志输出到文件,需要安装Serilog.Sinks.File包

// 初始化日志的共享实例
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .Enrich.FromLogContext()
                .WriteTo.File("logs/app.log", 
                    rollingInterval: RollingInterval.Day, // 每天一个日志文件
                    shared: true    // 允许其他进程共享日志文件
                ).CreateLogger();
            // 写入日志
            Log.Information("Info");

3、可以通过配置,让不同日志级别输出到不同的日志文件

// 初始化日志的共享实例
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .Enrich.FromLogContext()
                // 调试日志
                .WriteTo.Logger(x => x
                    .Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Debug)
                    .WriteTo.File("logs/debug.log", rollingInterval: RollingInterval.Day, shared: true)
                // 错误日志
                ).WriteTo.Logger(x => x
                    .Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Error)
                    .WriteTo.File("logs/error.log", rollingInterval: RollingInterval.Day, shared: true)
                // 应用日志
                ).WriteTo.Logger(x => x
                    .Filter.ByIncludingOnly(e => e.Level != Serilog.Events.LogEventLevel.Debug &&
                        e.Level != Serilog.Events.LogEventLevel.Error)
                    .WriteTo.File("logs/app.log", rollingInterval: RollingInterval.Day, shared: true)
                ).CreateLogger();
            // 写入日志到 app.log
            Log.Information("Info");
            // 写入日志到 debug.log
            Log.Debug("Debug");
            // 写入日志到 error.log
            Log.Error("Error");

4、写入日志到SqlServer

// 写入数据库的配置
            var sinkOpts = new MSSqlServerSinkOptions();
            sinkOpts.TableName = "logs";            // 日志表名
            sinkOpts.AutoCreateSqlTable = true;     // 自动创建表
            // 列配置
            var columnOpts = new ColumnOptions();
            columnOpts.Store.Remove(StandardColumn.Exception);  // 去掉异常列
            columnOpts.Store.Remove(StandardColumn.Properties); // 去掉属性列
            columnOpts.Exception.DataLength = 2048;             // 指定列的长度
            columnOpts.TimeStamp.NonClusteredIndex = true;      // 去掉时间戳的聚集索引
            // 初始化日志的共享实例
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .Enrich.FromLogContext()
                .WriteTo.MSSqlServer(
                        connectionString: ConfigurationManager.ConnectionStrings["Default"].ConnectionString,
                        sinkOptions: sinkOpts,
                        columnOptions: columnOpts
                 ).CreateLogger();
            // 写入日志
            Log.Information("Info");

执行代码后,发现日志表并没有添加到数据库,也没有任何异常信息,我们可以添加以下代码调试Serilog

Serilog.Debugging.SelfLog.Enable(msg =>
            {
                Debug.Print(msg);
                Debugger.Break();
            });

获取到如下的错误信息:

2022-11-26T09:34:53.6107406Z Unable to write 1 log events to the database due to following error: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)

需要在连接字符串添加信任服务器证书的配置:TrustServerCertificate=True;

就能在SqlServer中创建日志表并写入日志。

到此这篇关于C# 使用Serilog日志框架的文章就介绍到这了,更多相关C# Serilog日志框架内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# LiteDB基本使用示例代码

    C# LiteDB基本使用示例代码

    LiteDB是一种文档型单文件数据库,基于Key-Value方式存取数据,LiteDB 的灵感来自 MongoDB 数据库,所以它的 API 和 MongoDB 的 .NET API 非常相似,这篇文章主要介绍了C# LiteDB基本使用,需要的朋友可以参考下
    2024-03-03
  • 利用C#版OpenCV实现圆心求取实例代码

    利用C#版OpenCV实现圆心求取实例代码

    这篇文章主要给大家介绍了关于如何利用C#版OpenCV实现圆心求取的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • C#代码实现添加或删除PowerPoint文档中的节

    C#代码实现添加或删除PowerPoint文档中的节

    这篇文章主要为大家详细介绍了C#如何使用 Spire.Presentation for .NET 通过编程方式在 PowerPoint 文档中添加或删除节,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-03-03
  • 基于Unity3D实现仿真时钟详解

    基于Unity3D实现仿真时钟详解

    这篇文章主要为大家详细介绍了如何利用Unity3D模拟实现一个简单是时钟效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-01-01
  • C# Replace替换的具体使用

    C# Replace替换的具体使用

    本文主要介绍了C# Replace替换的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • c# 服务器上传木马监控代码(包含可疑文件)

    c# 服务器上传木马监控代码(包含可疑文件)

    c# 监控服务器上传木马(包含可疑文件)
    2010-05-05
  • C#实现程序单例日志输出功能

    C#实现程序单例日志输出功能

    这篇文章主要为大家详细介绍了C#实现程序单例日志输出功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • C#按路径流式遍历XML节点的实用方法

    C#按路径流式遍历XML节点的实用方法

    在处理大型 XML 文档时,传统的 XDocument.Load 会一次性将整个文档加载到内存中,对于大文件非常消耗资源,本文将分享一个按路径流式遍历 XML 节点的实用方法,支持深层嵌套路径,并保持流式解析,需要的朋友可以参考下
    2025-10-10
  • C#使用ML.Net完成人工智能预测

    C#使用ML.Net完成人工智能预测

    这篇文章主要介绍了C#使用ML.Net完成人工智能预测的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Unity实现鼠标或者手指点击模型播放动画

    Unity实现鼠标或者手指点击模型播放动画

    这篇文章主要为大家详细介绍了Unity实现鼠标或者手指点击模型播放动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01

最新评论