using Furion; using Furion.DatabaseAccessor; using Furion.DistributedIDGenerator; using Furion.Logging; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable { private readonly IServiceScope serviceScope; private readonly IRepository rep; public DatabaseLoggingWriter(IServiceScopeFactory scopeFactory) { serviceScope = scopeFactory.CreateScope(); rep = serviceScope.ServiceProvider.GetRequiredService>(); } public async Task WriteAsync(LogMessage logMsg, bool flush) { await rep.InsertNowAsync(new ConsoleLog { Id = IDGen.NextID(), Access = EnumConsoleLogAccess.Back, Content = logMsg.Message, Level = logMsg.LogLevel == LogLevel.Trace ? EnumLogLevel.Trace : logMsg.LogLevel == LogLevel.Debug ? EnumLogLevel.Debug : logMsg.LogLevel == LogLevel.Information ? EnumLogLevel.Information : logMsg.LogLevel == LogLevel.Warning ? EnumLogLevel.Warning : logMsg.LogLevel == LogLevel.Error ? EnumLogLevel.Error : logMsg.LogLevel == LogLevel.Critical ? EnumLogLevel.Critical : EnumLogLevel.Information, ClientIpAddress = App.HttpContext?.GetRemoteIpAddressToIPv4(), TraceId = logMsg.TraceId, CreatedTime = logMsg.LogDateTime, CreatedUserInfoId = JwtUtils.GetCurrentLogier()?.UserInfoId, }); } /// /// 释放服务作用域 /// public void Dispose() { serviceScope.Dispose(); } } }