扩展自定义日志,自动设置当前请求的Action和Controller名称

This commit is contained in:
skywolf627 2025-01-13 13:50:50 +08:00
parent 0504d18429
commit 52d9f85382

View File

@ -0,0 +1,41 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core.Extension;
public static class LogInformationExtension
{
/// <summary>
/// 添加自定义日志 自动设置当前请求的Action和Controller名称
/// </summary>
/// <param name="logger"></param>
/// <param name="title"></param>
/// <param name="logMessage"></param>
/// <param name="args"></param>
public static void AddLog(this ILogger logger, string title, string logMessage, params object[] args)
{
var request = App.HttpContext.Request;
//获取当前路由信息
var route = request.RouteValues.Values;
var scheme = request.Scheme; // 协议http 或 https
var host = request.Host.Value; // 主机名(包括端口)
var path = request.Path.Value; // 路径
var queryString = request.QueryString.Value; // 查询字符串
// 拼接完整链接
var fullUrl = $"{scheme}://{host}{path}{queryString}";
// 写入上下文
using var scope = logger.ScopeContext(ctx => ctx.Set("Title", title)
.Set("Action", route.FirstOrDefault()?.ToString())
.Set("Controller", route.Count > 1 ? route.Skip(1).FirstOrDefault().ToString() : "")
.Set("Url", fullUrl)
.Set("Method", request.Method)
);
// 记录日志
logger.LogInformation(logMessage, args);
// 使用方法 先注入_logger
// _logger.AddLog("日志标题", "日志内容");
}
}