using System.Text.Json; using Yitter.IdGenerator; namespace Admin.NET.Plugin.AiDOP.Supply; /// /// S3 业务操作日志写入(复用 Admin.NET sys_log_op)。 /// public class S3OperationLogService : ITransient { private readonly SqlSugarRepository _logOpRep; private readonly UserManager _userManager; public S3OperationLogService(SqlSugarRepository logOpRep, UserManager userManager) { _logOpRep = logOpRep; _userManager = userManager; } /// /// 写入 S3 操作日志;失败不影响主业务流程。 /// public async Task WriteAsync(S3OperationLogDto dto) { try { await _logOpRep.InsertAsync(new SysLogOp { Id = YitIdHelper.NextId(), DisplayTitle = dto.DisplayTitle, ControllerName = "S3", ActionName = dto.Action, Message = dto.Message, RequestParam = dto.Request == null ? null : JsonSerializer.Serialize(dto.Request), ReturnResult = dto.Result == null ? null : JsonSerializer.Serialize(dto.Result), Exception = dto.Exception, LogDateTime = DateTime.Now, Account = _userManager.Account, RealName = _userManager.RealName, CreateUserId = _userManager.UserId, TenantId = _userManager.TenantId, Status = dto.Success ? "200" : "500", LogLevel = dto.Success ? Microsoft.Extensions.Logging.LogLevel.Information : Microsoft.Extensions.Logging.LogLevel.Error, }); } catch { // 日志失败不应影响 S3 业务动作。 } } } public sealed class S3OperationLogDto { public string Action { get; set; } = string.Empty; public string DisplayTitle { get; set; } = string.Empty; public string Message { get; set; } = string.Empty; public object? Request { get; set; } public object? Result { get; set; } public string? Exception { get; set; } public bool Success { get; set; } = true; }