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<ConsoleLog, LogDbContextLocator> rep;
|
|
public DatabaseLoggingWriter(IServiceScopeFactory scopeFactory)
|
{
|
serviceScope = scopeFactory.CreateScope();
|
rep = serviceScope.ServiceProvider.GetRequiredService<IRepository<ConsoleLog, LogDbContextLocator>>();
|
}
|
|
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,
|
});
|
}
|
|
/// <summary>
|
/// 释放服务作用域
|
/// </summary>
|
public void Dispose()
|
{
|
serviceScope.Dispose();
|
}
|
}
|
}
|