using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Volo.Abp.Auditing; using Volo.Abp.DependencyInjection; using Volo.Abp.Uow; using Yi.Framework.AuditLogging.Domain.Repositories; using Yi.Framework.Core.Helper; namespace Yi.Framework.AuditLogging.Domain; public class AuditingStore : IAuditingStore, ITransientDependency { public ILogger Logger { get; set; } protected IAuditLogRepository AuditLogRepository { get; } protected IUnitOfWorkManager UnitOfWorkManager { get; } protected AbpAuditingOptions Options { get; } protected IAuditLogInfoToAuditLogConverter Converter { get; } public AuditingStore( IAuditLogRepository auditLogRepository, IUnitOfWorkManager unitOfWorkManager, IOptions options, IAuditLogInfoToAuditLogConverter converter) { AuditLogRepository = auditLogRepository; UnitOfWorkManager = unitOfWorkManager; Converter = converter; Options = options.Value; Logger = NullLogger.Instance; } public virtual async Task SaveAsync(AuditLogInfo auditInfo) { if (!Options.HideErrors) { await SaveLogAsync(auditInfo); return; } try { await SaveLogAsync(auditInfo); } catch (Exception ex) { Logger.LogWarning("Could not save the audit log object: " + Environment.NewLine + auditInfo.ToString()); Logger.LogException(ex, LogLevel.Error); } } protected virtual async Task SaveLogAsync(AuditLogInfo auditInfo) { Logger.LogDebug("Yi-请求追踪:" + JsonHelper.ObjToStr(auditInfo, "yyyy-MM-dd HH:mm:ss")); using (var uow = UnitOfWorkManager.Begin()) { await AuditLogRepository.InsertAsync(await Converter.ConvertAsync(auditInfo)); await uow.CompleteAsync(); } } }