ASP.NET 8 日志处理之日志类封装

1、依赖包和配置文件同前面文章;

2、新建静态类LoggerManagerExt:

注意更改数据库连接字符串

public static class LoggerManagerExt
{
    public static void Log4Register(this WebApplicationBuilder builder)
    {
        builder.Logging.AddLog4Net("CfgFile/Log4Net.config");
        builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);//设置最低级别
    }

    public static void NLogRegister(this WebApplicationBuilder builder)
    {
        NLog.LogManager.Setup().LoadConfigurationFromFile("CfgFile/NLog.config").GetCurrentClassLogger();
        builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);
        builder.Host.UseNLog();
    }

    public static void SeriLogRegister(this WebApplicationBuilder builder)
    {
        var filePath = Path.Combine(AppContext.BaseDirectory, "Logs/Serilog/log.txt");
        var logDB = @"Server=;database=demo1;uid=;pwd=;TrustServerCertificate=true";
        var sinkOpts = new MSSqlServerSinkOptions();
        sinkOpts.TableName = "Logs_Serilog";
        sinkOpts.AutoCreateSqlTable = true;
        sinkOpts.BatchPostingLimit = 1;
        sinkOpts.BatchPeriod = TimeSpan.FromSeconds(1);
        var columnOpts = new ColumnOptions();
        //columnOpts.Store.Remove(StandardColumn.Properties);
        //columnOpts.Store.Add(StandardColumn.LogEvent);
        //columnOpts.LogEvent.DataLength = 2048;
        //columnOpts.PrimaryKey = columnOpts.TimeStamp;
        //columnOpts.TimeStamp.NonClusteredIndex = true;
        columnOpts.Store.Remove(StandardColumn.MessageTemplate);
        columnOpts.Properties.ExcludeAdditionalProperties = true;
        columnOpts.AdditionalColumns = new Collection<SqlColumn>
        {
            new SqlColumn{DataType = System.Data.SqlDbType.NVarChar, DataLength = 32, ColumnName = "IP"}
        };

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.Console(
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] ({ThreadId}) {Message}{NewLine}{Exception}")
            .WriteTo.File(filePath,
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] ({ThreadId}) {Message:lj}{NewLine}{Exception}",
                rollingInterval: RollingInterval.Day,
                fileSizeLimitBytes: 1073741824) //1GB
            .Enrich.FromLogContext()
            .Enrich.WithProperty("IP", GetIpAddress())
            .WriteTo.MSSqlServer(
                connectionString: logDB,
                sinkOptions: sinkOpts,
                columnOptions: columnOpts
                ).CreateLogger();
        builder.Host.UseSerilog();
    }

    private static string GetIpAddress()
    {
        string ipAddress = "127.0.0.1";
        IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
        foreach (IPAddress ip in ips)
        {
            if (ip.AddressFamily.ToString().ToLower().Equals("internetwork"))
            {
                ipAddress = ip.ToString();
                return ipAddress;
            }
        }

        return ipAddress;
    }
}

3、在Program.cs中使用:

builder.Log4Register();

builder.NLogRegister();

builder.SeriLogRegister();
Log.Information("Starting web application");

4、使用同前面文章

总结

Serilog最好用,首选;

Log4Net次之;

NLog不用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄健华Yeah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值