针对自定义操作日志根据内容解析出控制器名称和函数名称

反正在操作日志列表中,只显示一个自定义操作日志,都看不到具体的函数名称。
This commit is contained in:
skywolf627 2024-11-21 15:53:45 +08:00
parent 73626e6884
commit 2f039f2865

View File

@ -29,15 +29,46 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
: SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
}
/// <summary>
/// 根据操作日志内容解析出控制器名称和函数名称
/// </summary>
/// <param name="logText"></param>
/// <returns></returns>
private static (string actionName, string controllerName) ExtractActionAndController(string logText)
{
try
{
// 获取第二行
var targetLine = logText.Split('\n')[1];
// 按点号分割字符串
var parts = targetLine.Split('.');
// 获取最后两个部分
if (parts.Length >= 2)
{
var actionName = parts[^1].Split('(')[0].Trim(); // 去除方法参数部分
var controllerName = parts[^2].Trim(); // 获取Controller名称
return (actionName, controllerName);
}
return (string.Empty, string.Empty);
}
catch
{
return (string.Empty, string.Empty);
}
}
public async Task WriteAsync(LogMessage logMsg, bool flush)
{
var jsonStr = logMsg.Context?.Get("loggingMonitor")?.ToString();
if (string.IsNullOrWhiteSpace(jsonStr))
{
var (actionName, controllerName) = ExtractActionAndController(logMsg.Message);
await _db.Insertable(new SysLogOp
{
DisplayTitle = "自定义操作日志",
LogDateTime = logMsg.LogDateTime,
LogDateTime = logMsg.LogDateTime,
ActionName = actionName,
ControllerName = controllerName,
EventId = logMsg.EventId.Id,
ThreadId = logMsg.ThreadId,
TraceId = logMsg.TraceId,