chengsc
2025-03-05 f502d8fbef172fa55a0c75a0e0f53aec1cbd3144
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog.Events;
using Serilog;
using System;
using System.Collections.Generic;
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
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public static IServiceCollection AddConfigSerilog(this IServiceCollection services)
        {
            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))
                .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(Log.Logger);
            return services;
        }
    }
}