【C# Serilog 日志记录】 控制台示例

using System;
using Serilog;

namespace SerilogConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                        .MinimumLevel.Information()
                        .WriteTo.Console()
                        .WriteTo.File("log.txt",
                            rollingInterval: RollingInterval.Day,
                            rollOnFileSizeLimit: true)
                        .CreateLogger();

            Log.Information("Hello, Serilog!");


            Log.CloseAndFlush();
            Log.Logger = new LoggerConfiguration()
                        .MinimumLevel.Debug()
                        .WriteTo.Console()
                        .WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day)
                        .CreateLogger();

            Log.Information("Hello, world!");

            int a = 10, b = 0;
            try
            {
                Log.Debug("Dividing {A} by {B}", a, b);
                Console.WriteLine(a / b);
                var input = new { Latitude = 25, Longitude = 134 };
                var time = 34;

                Log.Information("Processed {@SensorInput} in {TimeMS:000} ms.", input, time);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Something went wrong");
            }
            finally
            {
                Log.CloseAndFlush();
            }

            Console.WriteLine("Hello World!");
        }
    }
}

Getting Started · serilog/serilog Wiki (github.com)

Setup

类型位于 Serilog 命名空间中。

using Serilog;

根 Logger 是使用 LoggerConfiguration 创建的。

using var log = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();

这通常在应用程序启动时完成一次,并保存记录器以供应用程序类以后使用。 如果需要,可以单独创建和使用多个记录器

log.Information("Hello, Serilog!");

Serilog 的全局、可静态访问的记录器是通过 Log.Logger 设置的,并且可以使用 Log 类上的静态方法调用。

Log.Logger = log;
Log.Information("The global logger has been configured");

配置和使用 Log 类是一种可选的便利,它使库更容易采用 Serilog。 Serilog 不需要日志管道本身内的任何静态/进程范围的状态,因此直接使用 Logger/ILogger 就可以了。

Example application

下面的完整示例显示了一个简单的控制台应用程序的日志记录,其中将事件发送到控制台以及带有日期标记的滚动日志文件。

1.新建一个Console Application项目

2.安装核心Serilog包和console sink控制台接收器

在项目目录中的 shell 提示符处,键入:

$ dotnet add package Serilog
$ dotnet add package Serilog.Sinks.Console
$ dotnet add package Serilog.Sinks.File

3. 将以下代码添加到 Program.cs(略)

 

Home · serilog/serilog Wiki (github.com)

为什么选择 Serilog?

与许多其他 .NET 库一样,Serilog 为文件、控制台等提供基本的诊断日志记录。 它易于设置,具有干净的 API,并且可以在最近的 .NET 平台之间移植。

与 .NET 的其他日志库不同,与日志消息一起传递的参数不会破坏性地呈现为文本格式。 相反,它们被保存为结构化数据,可以以文档形式写入 NoSQL 数据存储

Serilog 消息模板使用扩展常规 .NET 格式字符串的简单 DSL。 属性在消息模板中命名,并在位置上与提供给 log 方法的参数匹配。

此示例记录两个属性 SensorInput 和 TimeMS 以及日志事件。

示例中捕获的 JSON 格式的属性如下所示:

{ "SensorInput": { "Latitude": 25, "Longitude": 134 },  "TimeMS": 34 }

SensorInput 前面的 @ 运算符指示 Serilog 保留传入对象的结构。如果省略,Serilog 可以识别字符串、数字、日期和时间、字典和枚举等简单类型; 所有其他对象都使用 ToString() 转换为字符串。 可以使用 $ 运算符代替 @ 强制“字符串化”

TimeMS 后面的 :000 段是一个标准的 .NET 格式字符串,它影响属性的呈现方式(而不是捕获方式)。 Serilog 包含的标准控制台接收器会将上述消息呈现为:

09:14:22 [Information] Processed { Latitude: 25, Longitude: 134 } in 034 ms. 

参考:

Getting Started · serilog/serilog Wiki (github.com)

基于.NetCore3.1系列 —— 日志记录之初识Serilog - 艾三元 - 博客园 (cnblogs.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值