|
|
using Microsoft.AspNetCore.Builder;
|
|
|
using Serilog;
|
|
|
using Serilog.Events;
|
|
|
using SlnMesnac.Config;
|
|
|
using System;
|
|
|
using System.IO;
|
|
|
|
|
|
#region << 版 本 注 释 >>
|
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
|
* 版权所有 (c) 2024 WenJY 保留所有权利。
|
|
|
* CLR版本:4.0.30319.42000
|
|
|
* 机器名称:LAPTOP-E0N2L34V
|
|
|
* 命名空间:SlnMesnac.Serilog
|
|
|
* 唯一标识:496f8d2b-70e3-4a05-ae18-a9b0fcd06b82
|
|
|
*
|
|
|
* 创建者:WenJY
|
|
|
* 电子邮箱:wenjy@mesnac.com
|
|
|
* 创建时间:2024-03-27 21:58:35
|
|
|
* 版本:V1.0.0
|
|
|
* 描述:
|
|
|
*
|
|
|
*--------------------------------------------------------------------
|
|
|
* 修改人:
|
|
|
* 时间:
|
|
|
* 修改说明:
|
|
|
*
|
|
|
* 版本:V1.0.0
|
|
|
*--------------------------------------------------------------------*/
|
|
|
|
|
|
#endregion << 版 本 注 释 >>
|
|
|
|
|
|
namespace SlnMesnac.Serilog
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// Serilog
|
|
|
/// </summary>
|
|
|
public static class SerilogExtensions
|
|
|
{
|
|
|
// 定义自定义日志级别
|
|
|
public static readonly LogEventLevel AgvLevel = (LogEventLevel)35;
|
|
|
|
|
|
//public static IApplicationBuilder UseSerilogExtensions(this IApplicationBuilder app)
|
|
|
//{
|
|
|
// // 获取当前程序所在的目录
|
|
|
// string currentDirectory = Directory.GetCurrentDirectory();
|
|
|
|
|
|
// Log.Logger = new LoggerConfiguration()
|
|
|
// .MinimumLevel.Verbose() // 确保能捕获所有级别日志
|
|
|
// .Enrich.With(new CustomLogLevelAbbreviationEnricher()) // 添加自定义日志级别缩写增强器
|
|
|
// .WriteTo.Console(
|
|
|
// outputTemplate: "{Timestamp:MM-dd HH:mm:ss} [{LevelAbbreviation}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}",
|
|
|
// restrictedToMinimumLevel: LogEventLevel.Error
|
|
|
|
|
|
// )
|
|
|
// // retainedFileCountLimit: 3, // 保留最近3天日志
|
|
|
// .WriteTo.File(path: GetDynamicLogPath("Info"), retainedFileCountLimit: 3, restrictedToMinimumLevel: LogEventLevel.Information, rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}")
|
|
|
// .WriteTo.File(path: GetDynamicLogPath("Error"), retainedFileCountLimit: 3, restrictedToMinimumLevel: LogEventLevel.Error, rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}")
|
|
|
// .WriteTo.File(path: GetDynamicLogPath("Agv"), retainedFileCountLimit: 3, restrictedToMinimumLevel: AgvLevel, rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}") // 新增 Agv 日志文件
|
|
|
// .CreateLogger();
|
|
|
|
|
|
// // 启用 Serilog 中间件
|
|
|
// app.UseSerilogRequestLogging();
|
|
|
|
|
|
// return app;
|
|
|
//}
|
|
|
|
|
|
public static IApplicationBuilder UseSerilogExtensions(this IApplicationBuilder app)
|
|
|
{
|
|
|
// 获取当前程序所在的目录
|
|
|
string currentDirectory = Directory.GetCurrentDirectory();
|
|
|
var logPath = Path.Combine(currentDirectory, "Logs");
|
|
|
Log.Logger = new LoggerConfiguration()
|
|
|
.MinimumLevel.Verbose() // 确保能捕获所有级别日志
|
|
|
.Enrich.With(new CustomLogLevelAbbreviationEnricher()) // 添加自定义日志级别缩写增强器
|
|
|
.WriteTo.Console(
|
|
|
outputTemplate: "{Timestamp:MM-dd HH:mm:ss} [{LevelAbbreviation}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}",
|
|
|
restrictedToMinimumLevel: LogEventLevel.Error
|
|
|
|
|
|
)
|
|
|
// retainedFileCountLimit: 3, // 保留最近3天日志
|
|
|
.WriteTo.Logger(lc => lc
|
|
|
.Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Info"))
|
|
|
.WriteTo.File(Path.Combine($"{logPath}/Info/", "Info.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3))
|
|
|
.WriteTo.Logger(lc => lc
|
|
|
.Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Plc"))
|
|
|
.WriteTo.File(Path.Combine($"{logPath}/Plc/", "Plc.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3))
|
|
|
.WriteTo.Logger(lc => lc
|
|
|
.Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Agv"))
|
|
|
.WriteTo.File(Path.Combine($"{logPath}/Agv/", "Agv.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3))
|
|
|
.WriteTo.Logger(lc => lc
|
|
|
.Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Error"))
|
|
|
.WriteTo.File(Path.Combine($"{logPath}/Error/", "Error.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3))
|
|
|
.CreateLogger();
|
|
|
|
|
|
// 启用 Serilog 中间件
|
|
|
app.UseSerilogRequestLogging();
|
|
|
|
|
|
return app;
|
|
|
}
|
|
|
|
|
|
// 新的动态路径生成方法
|
|
|
private static string GetDynamicLogPath(string logType)
|
|
|
{
|
|
|
return Path.Combine(
|
|
|
Directory.GetCurrentDirectory(),
|
|
|
"Logs",
|
|
|
$"{DateTime.UtcNow:yyyy-MM-dd}",
|
|
|
$"{logType}-.log"
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
} |