Ver código fonte

😎增加自定义日志入库示例

zuohuaijun 2 anos atrás
pai
commit
760f8aed1b

+ 7 - 2
Admin.NET/Admin.NET.Core/Job/LogJob.cs

@@ -16,10 +16,12 @@ namespace Admin.NET.Core;
 public class LogJob : IJob
 {
     private readonly IServiceScopeFactory _scopeFactory;
+    private readonly ILogger _logger;
 
-    public LogJob(IServiceScopeFactory scopeFactory)
+    public LogJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory)
     {
         _scopeFactory = scopeFactory;
+        _logger = loggerFactory.CreateLogger("System.Logging.LoggingMonitor");
     }
 
     public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
@@ -37,7 +39,10 @@ public class LogJob : IJob
 
         var originColor = Console.ForegroundColor;
         Console.ForegroundColor = ConsoleColor.Yellow;
-        Console.WriteLine("【" + DateTime.Now + "】清系统日志(30天前)");
+        Console.WriteLine("【" + DateTime.Now + "】清系统日志(30天前)");
         Console.ForegroundColor = originColor;
+
+        // 自定义日志
+        _logger.LogInformation("清理系统日志");
     }
 }

+ 8 - 1
Admin.NET/Admin.NET.Core/Job/OnlineUserJob.cs

@@ -6,6 +6,8 @@
 //
 // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
 
+using Furion.Logging.Extensions;
+
 namespace Admin.NET.Core;
 
 /// <summary>
@@ -16,10 +18,12 @@ namespace Admin.NET.Core;
 public class OnlineUserJob : IJob
 {
     private readonly IServiceScopeFactory _scopeFactory;
+    private readonly ILogger _logger;
 
-    public OnlineUserJob(IServiceScopeFactory scopeFactory)
+    public OnlineUserJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory)
     {
         _scopeFactory = scopeFactory;
+        _logger = loggerFactory.CreateLogger("System.Logging.LoggingMonitor");
     }
 
     public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
@@ -36,5 +40,8 @@ public class OnlineUserJob : IJob
 
         // 缓存租户列表
         await serviceScope.ServiceProvider.GetRequiredService<SysTenantService>().CacheTenant();
+
+        // 自定义日志
+        _logger.LogInformation("服务已重启...");
     }
 }

+ 17 - 3
Admin.NET/Admin.NET.Core/Logging/DatabaseLoggingWriter.cs

@@ -36,9 +36,23 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
     public async Task WriteAsync(LogMessage logMsg, bool flush)
     {
         var jsonStr = logMsg.Context?.Get("loggingMonitor")?.ToString();
-        if (jsonStr == null) return;
-        var loggingMonitor = JSON.Deserialize<dynamic>(jsonStr);
+        if (jsonStr == null)
+        {
+            await _db.Insertable(new SysLogOp
+            {
+                DisplayTitle = "自定义操作日志",
+                LogDateTime = logMsg.LogDateTime,
+                EventId = logMsg.EventId.Id,
+                ThreadId = logMsg.ThreadId,
+                TraceId = logMsg.TraceId,
+                Exception = logMsg.Exception == null ? null : JSON.Serialize(logMsg.Exception),
+                Message = logMsg.Message,
+                LogLevel = logMsg.LogLevel
+            }).ExecuteCommandAsync();
+            return;
+        }
 
+        var loggingMonitor = JSON.Deserialize<dynamic>(jsonStr);
         // 不记录数据校验日志
         if (loggingMonitor.validation != null) return;
 
@@ -69,7 +83,7 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
         // 捕捉异常,否则会由于 unhandled exception 导致程序崩溃
         try
         {
-            // 记录异常日志发送邮件
+            // 记录异常日志-发送邮件
             if (logMsg.Exception != null || loggingMonitor.exception != null)
             {
                 await _db.Insertable(new SysLogEx