hwh
2024-07-11 9895abdb4c0c060c52e285631bf3df845efb31e7
Wms/Utility/Extension/ServiceCollectionExtensions.cs
@@ -7,11 +7,20 @@
using System.Text;
using Serilog.Sinks.SystemConsole.Themes;
using Serilog.Filters;
using Autofac.Core;
using Serilog.Formatting.Json;
using System.Linq;
using ZXing;
using SqlSugar.Extensions;
namespace Utility
{
    public static class ServiceCollectionExtensions
    {
        internal static string LogFilePath(string fileName) => $@"Logs/{fileName}/{DateTime.Now.Year}.{DateTime.Now.Month}/log_.log";
        internal static readonly string seriCustomProperty = "seriPos";
        internal static readonly string logOutputTemplate = "时间: {Timestamp:yyyy-MM-dd HH:mm:ss}{NewLine}来源: {SourceContext}{NewLine}内容: [{Level:u3}] {Message}{NewLine}{Exception}{NewLine}";
        internal static readonly long? fileSize = 31457280L;
        const string template = "时间: {Timestamp:yyyy-MM-dd HH:mm:ss}{NewLine}来源: {SourceContext}{NewLine}内容: [{Level:u3}] {Message}{NewLine}{Exception}{NewLine}";
        /// <summary>
        /// 添加配置Serilog
@@ -22,8 +31,71 @@
        public static IServiceCollection AddConfigSerilog(this IServiceCollection services)
        {
            // 创建Serilog记录日志
            //Log.Logger = new LoggerConfiguration()
            //    .MinimumLevel.Debug()
            //    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
            //    .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Fatal)
            //    .MinimumLevel.Override("Quartz", LogEventLevel.Warning)
            //    .MinimumLevel.Override("Serilog", LogEventLevel.Information)
            //    // 全部日志写入到Console
            //    .WriteTo.Console()
            //    .WriteTo.Async(c => c.Console(
            //       theme: AnsiConsoleTheme.Literate,
            //        outputTemplate: template))
            //    // Debug日志写入到文件
            //    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Debug))
            //    .WriteTo.Async(c => c.File(
            //        path: "Logs/Debug_.txt",
            //        rollingInterval: RollingInterval.Day,
            //        fileSizeLimitBytes: 1024 * 1024 * 10,
            //        retainedFileCountLimit: 100,
            //        outputTemplate: template,
            //        restrictedToMinimumLevel: LogEventLevel.Debug))
            //    // Information日志写入到文件
            //    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Information))
            //    .WriteTo.Async(c => c.File(
            //        path: "Logs/Information_.txt",
            //        rollingInterval: RollingInterval.Day,
            //        fileSizeLimitBytes: 1024 * 1024 * 10,
            //        retainedFileCountLimit: 100,
            //        outputTemplate: template,
            //        restrictedToMinimumLevel: LogEventLevel.Information))
            //    // Warning日志写入到文件
            //    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Warning))
            //    .WriteTo.Async(c => c.File(
            //        path: "Logs/Warning_.txt",
            //        rollingInterval: RollingInterval.Day,
            //        fileSizeLimitBytes: 1024 * 1024 * 10,
            //        retainedFileCountLimit: 100,
            //        outputTemplate: template,
            //        restrictedToMinimumLevel: LogEventLevel.Warning))
            //    // Error日志写入到文件
            //    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Error))
            //    .WriteTo.Async(c => c.File(
            //        path: "Logs/Error_.txt",
            //        rollingInterval: RollingInterval.Day,
            //        fileSizeLimitBytes: 1024 * 1024 * 10,
            //        retainedFileCountLimit: 1000,
            //        outputTemplate: template,
            //        restrictedToMinimumLevel: LogEventLevel.Error))
            //    .CreateLogger();
            //Log.Logger = new LoggerConfiguration()
            //                .Enrich.FromLogContext()
            //                .WriteTo.Console() // 输出到控制台
            //                .MinimumLevel.Debug() // 测试最小记录级别
            //                .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => {
            //                    var result = p.Properties.FirstOrDefault(c => c.Key == "SourceContext").Value;
            //                    if (result != null)
            //                    {
            //                        return result.ToString().Contains("模块名");
            //                    }
            //                    return false;
            //                }).WriteTo
            //                .File(LogFilePath("模块目录"), rollingInterval: RollingInterval.Day, outputTemplate: template))
            //                .CreateLogger();
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Information()
                .MinimumLevel.Debug()
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Fatal)
                .MinimumLevel.Override("Quartz", LogEventLevel.Warning)
@@ -34,6 +106,7 @@
                   theme: AnsiConsoleTheme.Literate,
                    outputTemplate: template))
                // Debug日志写入到文件
                //.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Debug))
                //.WriteTo.Async(c => c.File(
                //    path: "Logs/Debug_.txt",
                //    rollingInterval: RollingInterval.Day,
@@ -41,34 +114,35 @@
                //    retainedFileCountLimit: 100,
                //    outputTemplate: template,
                //    restrictedToMinimumLevel: LogEventLevel.Debug))
                // Information日志写入到文件
                .WriteTo.Async(c => c.File(
                    path: "Logs/Information_.txt",
                    rollingInterval: RollingInterval.Day,
                    fileSizeLimitBytes: 1024 * 1024 * 10,
                    retainedFileCountLimit: 100,
                    outputTemplate: template,
                    restrictedToMinimumLevel: LogEventLevel.Information))
                // Warning日志写入到文件
                .WriteTo.Async(c => c.File(
                    path: "Logs/Warning_.txt",
                    rollingInterval: RollingInterval.Day,
                    fileSizeLimitBytes: 1024 * 1024 * 10,
                    retainedFileCountLimit: 100,
                    outputTemplate: template,
                    restrictedToMinimumLevel: LogEventLevel.Warning))
                // Error日志写入到文件
                .WriteTo.Async(c => c.File(
                    path: "Logs/Error_.txt",
                    rollingInterval: RollingInterval.Day,
                    fileSizeLimitBytes: 1024 * 1024 * 10,
                    retainedFileCountLimit: 1000,
                    outputTemplate: template,
                    restrictedToMinimumLevel: LogEventLevel.Error))
                .WriteTo.Logger(lc => lc
                        .Filter.ByIncludingOnly((e) => e.Level == Serilog.Events.LogEventLevel.Information)
                        .WriteTo.File("Logs/info/.log", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: 1024 * 1024 * 10))
                .WriteTo.Logger(lc => lc
                        .Filter.ByIncludingOnly((e) => e.Level == Serilog.Events.LogEventLevel.Debug)
                        .WriteTo.File("Logs/debug/.log", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: 1024 * 1024 * 10))
                .WriteTo.Logger(lc => lc
                        .Filter.ByIncludingOnly((e) => e.Level == Serilog.Events.LogEventLevel.Error)
                        .WriteTo.File("Logs/error/.log", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: 1024 * 1024 * 10))
                .WriteTo.Logger(lc => lc
                        .Filter.ByIncludingOnly((e) => e.Level == Serilog.Events.LogEventLevel.Verbose)
                        .WriteTo.File("Logs/verbose/.log", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: 1024 * 1024 * 10))
                .WriteTo.Logger(lc => lc
                        .Filter.ByIncludingOnly((e) => e.Level == Serilog.Events.LogEventLevel.Warning)
                        .WriteTo.File("Logs/warning/.log", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: 1024 * 1024 * 10))
                .WriteTo.Logger(lc => lc
                        .Filter.ByIncludingOnly((e) =>
                        {
                            var result = e.Properties.FirstOrDefault(c => c.Key == "ExternalSystems").Value;
                            if (result != null)
                            {
                                return result.ObjToBool();
                            }
                            return false;
                        })
                        .WriteTo.File("Logs/api/.log", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: 1024 * 1024 * 10))
                .CreateLogger();
            services.AddSerilog();
            services.AddSerilog(Log.Logger);
            return services;
        }
    }