// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
//using Microsoft.AspNetCore.Mvc.Controllers;
//using System.Security.Claims;
//namespace Admin.NET.Core.Logging;
/////
///// 全局异常处理
/////
//public class LogExceptionHandler : IGlobalExceptionHandler, ISingleton
//{
// private readonly IEventPublisher _eventPublisher;
// public LogExceptionHandler(IEventPublisher eventPublisher)
// {
// _eventPublisher = eventPublisher;
// }
// public async Task OnExceptionAsync(ExceptionContext context)
// {
// var actionMethod = (context.ActionDescriptor as ControllerActionDescriptor)?.MethodInfo;
// var displayNameAttribute = actionMethod.IsDefined(typeof(DisplayNameAttribute), true) ? actionMethod.GetCustomAttribute(true) : default;
// var sysLogEx = new SysLogEx
// {
// Account = App.User?.FindFirstValue(ClaimConst.Account),
// RealName = App.User?.FindFirstValue(ClaimConst.RealName),
// ControllerName = actionMethod.DeclaringType.FullName,
// ActionName = actionMethod.Name,
// DisplayTitle = displayNameAttribute?.DisplayName,
// Exception = $"异常信息:{context.Exception.Message} 异常来源:{context.Exception.Source} 堆栈信息:{context.Exception.StackTrace}",
// Message = "全局异常",
// RequestParam = context.Exception.TargetSite.GetParameters().ToString(),
// HttpMethod = context.HttpContext.Request.Method,
// RequestUrl = context.HttpContext.Request.GetRequestUrlAddress(),
// RemoteIp = context.HttpContext.GetRemoteIpAddressToIPv4(),
// Browser = context.HttpContext.Request.Headers["User-Agent"],
// TraceId = App.GetTraceId(),
// ThreadId = App.GetThreadId(),
// LogDateTime = DateTime.Now,
// LogLevel = LogLevel.Error
// };
// await _eventPublisher.PublishAsync(new ChannelEventSource("Add:ExLog", sysLogEx));
// await _eventPublisher.PublishAsync("Send:ErrorMail", sysLogEx);
// }
//}