SeriLog学习(一)

SeriLog的创建

SeriLog项目在Github上的说明Readme,使用NuGet包管理器控制台安装。

Install-Package Serilog
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File

创建动态实例

var log = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("log.txt")
    .CreateLogger();

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

创建全局静态实例

		Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.Console()
            .WriteTo.File("log.txt",
                rollingInterval: RollingInterval.Day,
                rollOnFileSizeLimit: true)
            .CreateLogger();
            
        Log.Information("Hello, Serilog!");
        
        Log.CloseAndFlush();

一个简单的模板

			//日志的输出模板
            string Logformat = @"{Timestamp:yyyy-MM-dd HH:mm-dd }[{Level:u3}] {Message:lj}{NewLine}";
            //类似创建一个管道
            var log = new LoggerConfiguration()
                //设置最低等级
                .MinimumLevel.Debug()     
                //将事件发送到控制台并展示
                .WriteTo.Console(outputTemplate:Logformat)
                .CreateLogger();
                //
            Log.Logger = log;
            
           //这里因为设置了最低等级为Debug,
            //所以比Debug低的Verbose不会展示在控制台
            Log.Verbose("这是一个Verbose");
            Log.Information("开始");
            int a = 0;
            int b = 2;
            try
            {
                Log.Debug("计算两者相除");
                Console.WriteLine(b / a);
            }catch(Exception ex)
            {
                Log.Error(ex, "计算出现意外的错误");
            }
            Log.Information("结束");

在线文档

帮助文档

一个完整的例子

using System;
using System.Text;
using System.Diagnostics;
using Serilog;
namespace SerilogConsole
{
    class Program
    {
        static void Main()
        {
            // 创建全局静态实例
            Log.Logger = new LoggerConfiguration()
                //设置最低等级
                .MinimumLevel.Verbose()
                //将事件发送到文件
                .WriteTo.File(@".\Log\Log.txt",     // 日志文件名
                    outputTemplate:                    // 设置输出格式,显示详细异常信息
                    @"{Timestamp:yyyy-MM-dd HH:mm-ss.fff }[{Level:u3}] {Message:lj}{NewLine}{Exception}", 
                    rollingInterval: RollingInterval.Day,   // 日志按月保存
                    rollOnFileSizeLimit: true,              // 限制单个文件的最大长度
                    encoding:Encoding.UTF8,                 // 文件字符编码
                    retainedFileCountLimit:10,              // 最大保存文件数
                    fileSizeLimitBytes:10*1024)                // 最大单个文件长度
                .CreateLogger();
            
            var stopWatch = new Stopwatch();
            stopWatch.Start();
            Log.Verbose("Hello SeriLog!");
            Log.Information("开始测试");

            for (var i = 0; i < 1000; i++)  // 产生1000次异常测试
            {
                try
                {
                    Log.Debug("抛出异常");
                    throw new InvalidProgramException("程序错误。");
                }
                catch (Exception e)
                {
                    Log.Error(e, "捕获异常");
                }
            }
            stopWatch.Stop();
            Log.Information($"结束测试, 共运行{stopWatch.ElapsedMilliseconds}ms。");
            Log.CloseAndFlush();

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

运行产生的日志文件:

可看到一共产生了25个日志文件,每个文件最大10K,只保留最新的10个文件。

Serilog是一个流行的.NET日志框架,它允许开发者精细控制日志记录的行为。过滤(Filtering)是Serilog的核心特性之一,其目的是为了根据特定条件仅记录某些级别的日志消息,提高应用的日志处理效率并保持信息的清晰。 在Serilog中,你可以通过配置规则来过滤日志记录。这通常涉及到以下几个步骤: 1. **启用过滤**:首先,在应用程序启动时,你需要创建一个`Serilog.Sinks.Console`或者其他sink实例,并配置一个过滤器。 ```csharp Log.Logger = new LoggerConfiguration() .Enrich.WithProperty("Source", "MyApp") .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Source}: {Message}{NewLine}{Exception}") .Filter.ByIncludingOnly(info => info.Level == LogEventLevel.Error) // 或者自定义过滤器函数 .Filter((logEvent) => logEvent.Message.Contains("critical error")) .CreateLogger(); ``` 2. **过滤级别**:可以基于日志级别如Debug、Info、Warning、Error等来选择记录哪些级别的消息。 3. **自定义过滤**:还可以编写Lambda表达式或匿名函数来自定义更复杂的过滤逻辑,比如根据日志内容、属性值等。 4. **全局或局部过滤**:可以在全局配置文件中设置默认过滤规则,也可以在代码中针对特定部分单独配置过滤。 通过这样的过滤机制,你可以更好地控制日志的可见性和详细程度,有助于分析和调试程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值