Bladeren bron

feat: 实现“开启操作日志”参数控制

许俊杰 3 jaren geleden
bovenliggende
commit
5ba44a8d2e

+ 37 - 29
Admin.NET/Admin.NET.Core/Logging/DatabaseLoggingWriter.cs

@@ -9,12 +9,14 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter
 {
     private readonly SqlSugarRepository<SysLogVis> _sysLogVisRep; // 访问日志
     private readonly SqlSugarRepository<SysLogOp> _sysLogOpRep;   // 操作日志
+    private readonly SysConfigService _sysConfigService; // 参数配置服务
 
     public DatabaseLoggingWriter(SqlSugarRepository<SysLogVis> sysLogVisRep,
-        SqlSugarRepository<SysLogOp> sysLogOpRep)
+        SqlSugarRepository<SysLogOp> sysLogOpRep, SysConfigService sysConfigService)
     {
         _sysLogVisRep = sysLogVisRep;
         _sysLogOpRep = sysLogOpRep;
+        _sysConfigService = sysConfigService;
     }
 
     public async void Write(LogMessage logMsg, bool flush)
@@ -47,7 +49,7 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter
 
         if (loggingMonitor.actionName == "userInfo" || loggingMonitor.actionName == "logout")
         {
-            _sysLogVisRep.Insert(new SysLogVis
+            await _sysLogVisRep.InsertAsync(new SysLogVis
             {
                 ControllerName = loggingMonitor.controllerName,
                 ActionName = loggingMonitor.actionTypeName,
@@ -69,34 +71,40 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter
         }
         else
         {
-            _sysLogOpRep.Insert(new SysLogOp
+            // 如果启用操作日志
+            var sysOpLogEnabled = await _sysConfigService.GetConfigValue<bool>(CommonConst.SysOpLog);
+            if (sysOpLogEnabled)
             {
-                ControllerName = loggingMonitor.controllerName,
-                ActionName = loggingMonitor.actionTypeName,
-                DisplayTitle = loggingMonitor.displayTitle,
-                Status = loggingMonitor.returnInformation?.httpStatusCode,
-                RemoteIp = remoteIPv4,
-                Location = ipLocation,
-                Longitude = longitude,
-                Latitude = latitude,
-                Browser = loggingMonitor.userAgent,
-                Os = loggingMonitor.osDescription + " " + loggingMonitor.osArchitecture,
-                Elapsed = loggingMonitor.timeOperationElapsedMilliseconds,
-                LogDateTime = logMsg.LogDateTime,
-                Account = account,
-                RealName = realName,
-                HttpMethod = loggingMonitor.httpMethod,
-                RequestUrl = loggingMonitor.requestUrl,
-                RequestParam = (loggingMonitor.parameters == null || loggingMonitor.parameters.Count == 0) ? null : JSON.Serialize(loggingMonitor.parameters[0].value),
-                ReturnResult = loggingMonitor.returnInformation == null ? null : JSON.Serialize(loggingMonitor.returnInformation),
-                EventId = logMsg.EventId.Id,
-                ThreadId = logMsg.ThreadId,
-                TraceId = logMsg.TraceId,
-                Exception = loggingMonitor.exception == null ? null : JSON.Serialize(loggingMonitor.exception),
-                Message = logMsg.Message,
-                CreateUserId = string.IsNullOrWhiteSpace(userId) ? 0 : long.Parse(userId),
-                TenantId = string.IsNullOrWhiteSpace(tenantId) ? 0 : long.Parse(tenantId)
-            });
+                await _sysLogOpRep.InsertAsync(new SysLogOp
+                {
+                    ControllerName = loggingMonitor.controllerName,
+                    ActionName = loggingMonitor.actionTypeName,
+                    DisplayTitle = loggingMonitor.displayTitle,
+                    Status = loggingMonitor.returnInformation?.httpStatusCode,
+                    RemoteIp = remoteIPv4,
+                    Location = ipLocation,
+                    Longitude = longitude,
+                    Latitude = latitude,
+                    Browser = loggingMonitor.userAgent,
+                    Os = loggingMonitor.osDescription + " " + loggingMonitor.osArchitecture,
+                    Elapsed = loggingMonitor.timeOperationElapsedMilliseconds,
+                    LogDateTime = logMsg.LogDateTime,
+                    Account = account,
+                    RealName = realName,
+                    HttpMethod = loggingMonitor.httpMethod,
+                    RequestUrl = loggingMonitor.requestUrl,
+                    RequestParam = (loggingMonitor.parameters == null || loggingMonitor.parameters.Count == 0) ? null : JSON.Serialize(loggingMonitor.parameters[0].value),
+                    ReturnResult = loggingMonitor.returnInformation == null ? null : JSON.Serialize(loggingMonitor.returnInformation),
+                    EventId = logMsg.EventId.Id,
+                    ThreadId = logMsg.ThreadId,
+                    TraceId = logMsg.TraceId,
+                    Exception = loggingMonitor.exception == null ? null : JSON.Serialize(loggingMonitor.exception),
+                    Message = logMsg.Message,
+                    CreateUserId = string.IsNullOrWhiteSpace(userId) ? 0 : long.Parse(userId),
+                    TenantId = string.IsNullOrWhiteSpace(tenantId) ? 0 : long.Parse(tenantId)
+                });
+            }
+
         }
 
         // 若有异常时则发送邮件

+ 14 - 4
Admin.NET/Admin.NET.Core/Logging/ElasticSearchLoggingWriter.cs

@@ -8,16 +8,26 @@ namespace Admin.NET.Core;
 public class ElasticSearchLoggingWriter : IDatabaseLoggingWriter
 {
     private readonly ElasticClient _esClient;
+    private readonly SysConfigService _sysConfigService; // 参数配置服务
 
-    public ElasticSearchLoggingWriter(ElasticClient esClient)
+    public ElasticSearchLoggingWriter(ElasticClient esClient, SysConfigService sysConfigService)
     {
         _esClient = esClient;
+        _sysConfigService = sysConfigService;
     }
 
-    public void Write(LogMessage logMsg, bool flush)
+    public async void Write(LogMessage logMsg, bool flush)
     {
+        // 如果启用操作日志
+        var sysOpLogEnabled = await _sysConfigService.GetConfigValue<bool>(CommonConst.SysOpLog);
+        if (!sysOpLogEnabled) return;
+
         var jsonStr = logMsg.Context.Get("loggingMonitor").ToString();
-        // var loggingMonitor = JSON.Deserialize<dynamic>(jsonStr);
-        _esClient.IndexDocument(jsonStr);
+        var loggingMonitor = JSON.Deserialize<dynamic>(jsonStr);
+
+        // 登录登出日志,不记录
+        if (loggingMonitor.actionName == "userInfo" || loggingMonitor.actionName == "logout") return;
+
+        await _esClient.IndexDocumentAsync(jsonStr);
     }
 }