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)
|
{
|
// 创建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.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))
|
.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;
|
}
|
}
|
}
|