LoggingDbProcess.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using AipGateway.API.Application.UtilityServices;
  2. using AipGateway.API.Domain.Common.Utilities;
  3. using AipGateway.API.Domain.Entities;
  4. using AipGateway.API.Domain.IRepositories.IGenericRepositories;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Microsoft.Extensions.Logging;
  7. namespace AipGateway.API.Application.Pipeline.Middlewares.Logging
  8. {
  9. public class LoggingDbProcess
  10. {
  11. private readonly ILogger<LoggingDbProcess> _log;
  12. private readonly BlockingConcurrentQueue<LoggingDb> _logQueue;
  13. private readonly CancellationTokenSource _cancellationTokenSource;
  14. public LoggingDbProcess(ILogger<LoggingDbProcess> logger)
  15. {
  16. _log = logger;
  17. _logQueue = new BlockingConcurrentQueue<LoggingDb>();
  18. _cancellationTokenSource = new CancellationTokenSource();
  19. _log.LogError("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
  20. // Start a separate thread to process logs
  21. Task.Run(ProcessLogsAsync);
  22. }
  23. public void EnqueueLog(LoggingDb log)
  24. {
  25. _logQueue.Enqueue(log);
  26. }
  27. private async Task ProcessLogsAsync()
  28. {
  29. while (!_cancellationTokenSource.Token.IsCancellationRequested)
  30. {
  31. if (_logQueue.TryDequeue(out var log))
  32. {
  33. // Save log to the database
  34. await SaveLogToDatabaseAsync(log);
  35. }
  36. else
  37. {
  38. // Sleep or wait for new logs
  39. await Task.Delay(100);
  40. }
  41. }
  42. }
  43. private async Task SaveLogToDatabaseAsync(LoggingDb log)
  44. {
  45. IUnitOfWork? unitOfWork = ServiceContainer.provider.GetService<IUnitOfWork>();
  46. if (unitOfWork != null)
  47. {
  48. if (log.logType == 1)
  49. {
  50. TbAipApiCallLog? aipCallLog = log.logData as TbAipApiCallLog;
  51. if (aipCallLog != null)
  52. {
  53. unitOfWork.AipApiCallLogRepository.AddAsync(aipCallLog);
  54. unitOfWork.Complete();
  55. _log.LogError("Save Log...");
  56. }
  57. else
  58. {
  59. _log.LogError("eeeeeeeeeeeeeeeeeeeeeeeee");
  60. }
  61. }
  62. else
  63. {
  64. _log.LogError("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: {0}", log.logType);
  65. }
  66. }
  67. else
  68. {
  69. _log.LogError("NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN");
  70. }
  71. }
  72. public void StopProcessing()
  73. {
  74. _cancellationTokenSource.Cancel();
  75. }
  76. }
  77. }