From 8da8b65892c27b5faaba099a2c3e1e0333019cc7 Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Wed, 15 May 2024 20:04:47 +0200 Subject: [PATCH] Logger improvements, fixes, etc... --- AyCode.Core.Server/Loggers/GlobalLogger.cs | 9 ++++ AyCode.Core/Loggers/AcConsoleLogWriter.cs | 5 +- AyCode.Core/Loggers/AcLogWriterBase.cs | 24 +++++---- AyCode.Core/Loggers/AcLoggerBase.cs | 19 +++++-- AyCode.Core/Loggers/AcTextLogWriterBase.cs | 27 ++++++---- AyCode.Core/Loggers/IAcLogWriterBase.cs | 8 ++- AyCode.Database/AcDbLogItemWriter.cs | 17 ++----- .../Loggers/AcLoggerDbContextBase.cs | 1 + .../Loggers/IAcLoggerDbContextBase.cs | 1 + .../DbSets/Loggers/IAcLogItemDbSetBase.cs | 1 + .../AyCode.Entities.Server.csproj | 2 + AyCode.Entities.Server/LogItems/AcLogItem.cs | 22 +++++++++ AyCode.Entities.Server/LogItems/IAcLogItem.cs | 12 +++++ AyCode.Entities/AcLogItemWriterBase.cs | 49 ++++++++++++++----- AyCode.Entities/AyCode.Entities.csproj | 1 - .../{AcLogItem.cs => AcLogItemClient.cs} | 9 +--- .../{IAcLogItem.cs => IAcLogItemClient.cs} | 5 +- .../Loggers/AcHttpClientLogItemWriter.cs | 2 +- 18 files changed, 153 insertions(+), 61 deletions(-) create mode 100644 AyCode.Entities.Server/LogItems/AcLogItem.cs create mode 100644 AyCode.Entities.Server/LogItems/IAcLogItem.cs rename AyCode.Entities/LogItems/{AcLogItem.cs => AcLogItemClient.cs} (68%) rename AyCode.Entities/LogItems/{IAcLogItem.cs => IAcLogItemClient.cs} (76%) diff --git a/AyCode.Core.Server/Loggers/GlobalLogger.cs b/AyCode.Core.Server/Loggers/GlobalLogger.cs index 47706a9..b947749 100644 --- a/AyCode.Core.Server/Loggers/GlobalLogger.cs +++ b/AyCode.Core.Server/Loggers/GlobalLogger.cs @@ -63,5 +63,14 @@ namespace AyCode.Core.Server.Loggers public static void Error(string? text, Exception? ex = null, string? categoryName = null, [CallerMemberName] string? memberName = null) => Instance._logger.Error(text, ex, categoryName ?? DefaultCategoryName, memberName); + + public static void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName) + => Write(appType, logLevel, logText, callerMemberName, categoryName, null, null); + + public static void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, Exception? ex) + => Write(appType, logLevel, logText, callerMemberName, categoryName, ex?.GetType().Name, ex?.ToString()); + + public static void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage) + => Instance._logger.Write(appType, logLevel, logText, callerMemberName, categoryName, errorType, exMessage); } } diff --git a/AyCode.Core/Loggers/AcConsoleLogWriter.cs b/AyCode.Core/Loggers/AcConsoleLogWriter.cs index 83d60b6..0ef779a 100644 --- a/AyCode.Core/Loggers/AcConsoleLogWriter.cs +++ b/AyCode.Core/Loggers/AcConsoleLogWriter.cs @@ -4,7 +4,10 @@ using AyCode.Utils.Extensions; namespace AyCode.Core.Loggers; -public class AcConsoleLogWriter : AcTextLogWriterBase +public interface IAcConsoleLogWriter : IAcTextLogWriterBase +{} + +public class AcConsoleLogWriter : AcTextLogWriterBase, IAcConsoleLogWriter { protected AcConsoleLogWriter() : this(null) { } diff --git a/AyCode.Core/Loggers/AcLogWriterBase.cs b/AyCode.Core/Loggers/AcLogWriterBase.cs index 55fa795..784d4ff 100644 --- a/AyCode.Core/Loggers/AcLogWriterBase.cs +++ b/AyCode.Core/Loggers/AcLogWriterBase.cs @@ -16,7 +16,7 @@ public abstract class AcLogWriterBase : IAcLogWriterBase protected AcLogWriterBase(string? categoryName = null) { - CategoryName = categoryName; + CategoryName = categoryName ?? "..."; AppType = AcEnv.AppConfiguration.GetEnum("AyCode:Logger:AppType"); @@ -34,35 +34,35 @@ public abstract class AcLogWriterBase : IAcLogWriterBase AppType = appType; LogLevel = logLevel; - CategoryName = categoryName; + CategoryName = categoryName ?? "..."; } public void Detail(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null) - => PrepareToWrite(LogLevel.Detail, text, memberName, categoryName ?? CategoryName); + => Write(AppType, LogLevel.Detail, text, memberName, categoryName ?? CategoryName); //public void Detail(string? text, [CallerMemberName] string? memberName = null) where TCallerClassType : class // => Detail(text, typeof(TCallerClassType).Name, memberName); public void Debug(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null) - => PrepareToWrite(LogLevel.Debug, text, memberName, categoryName ?? CategoryName); + => Write(AppType, LogLevel.Debug, text, memberName, categoryName ?? CategoryName); //public void Debug(string? text, [CallerMemberName] string? memberName = null) where TCallerClassType : class // => Debug(text, typeof(TCallerClassType).Name, memberName); public void Info(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null) - => PrepareToWrite(LogLevel.Info, text, memberName, categoryName ?? CategoryName); + => Write(AppType, LogLevel.Info, text, memberName, categoryName ?? CategoryName); //public void Info(string? text, [CallerMemberName] string? memberName = null) where TCallerClassType : class // => Info(text, typeof(TCallerClassType).Name, memberName); public void Warning(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null) - => PrepareToWrite(LogLevel.Warning, text, memberName, categoryName ?? CategoryName); + => Write(AppType, LogLevel.Warning, text, memberName, categoryName ?? CategoryName); //public void Warning(string? text, [CallerMemberName] string? memberName = null) where TCallerClassType : class // => Warning(text, typeof(TCallerClassType).Name, memberName); public void Suggest(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null) - => PrepareToWrite(LogLevel.Suggest, text, memberName, categoryName ?? CategoryName); + => Write(AppType, LogLevel.Suggest, text, memberName, categoryName ?? CategoryName); //public void Suggest(string? text, [CallerMemberName] string? memberName = null) where TCallerClassType : class // => Suggest(text, typeof(TCallerClassType).Name, memberName); @@ -71,11 +71,17 @@ public abstract class AcLogWriterBase : IAcLogWriterBase // => Error(text, ex, typeof(TCallerClassType).Name, memberName); public void Error(string? text, Exception? ex = null, string? categoryName = null, [CallerMemberName] string? memberName = null) - => PrepareToWrite(LogLevel.Error, text, memberName, categoryName ?? CategoryName, ex); + => Write(AppType, LogLevel.Error, text, memberName, categoryName ?? CategoryName, ex); + public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName) + => Write(appType, logLevel, logText, callerMemberName, categoryName, null, null); - protected virtual void PrepareToWrite(LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName = null, Exception? ex = null) + public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, Exception? ex) + => Write(appType, logLevel, logText, callerMemberName, categoryName, ex?.GetType().Name, ex?.ToString()); + + public virtual void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage) { throw new NotImplementedException(); } + } \ No newline at end of file diff --git a/AyCode.Core/Loggers/AcLoggerBase.cs b/AyCode.Core/Loggers/AcLoggerBase.cs index 0ecbac6..61ce540 100644 --- a/AyCode.Core/Loggers/AcLoggerBase.cs +++ b/AyCode.Core/Loggers/AcLoggerBase.cs @@ -1,6 +1,7 @@ using System.Runtime.CompilerServices; using AyCode.Core.Consts; using AyCode.Core.Enums; +using static System.Net.Mime.MediaTypeNames; namespace AyCode.Core.Loggers; @@ -18,7 +19,7 @@ public abstract class AcLoggerBase : IAcLoggerBase protected AcLoggerBase(string? categoryName) { - CategoryName = categoryName; + CategoryName = categoryName ?? "..."; AppType = AcEnv.AppConfiguration.GetEnum("AyCode:Logger:AppType"); LogLevel = AcEnv.AppConfiguration.GetEnum("AyCode:Logger:LogLevel"); @@ -41,7 +42,7 @@ public abstract class AcLoggerBase : IAcLoggerBase AppType = appType; LogLevel = logLevel; - CategoryName = categoryName; + CategoryName = categoryName ?? "..."; foreach (var acLogWriterBase in logWriters) LogWriters.Add(acLogWriterBase); @@ -90,12 +91,22 @@ public abstract class AcLoggerBase : IAcLoggerBase //public virtual void Suggest(string? text, [CallerMemberName] string? memberName = null) where TCallerClassType : class // => Suggest(text, typeof(TCallerClassType).Name, memberName); + //public virtual void Error(string? text, Exception? ex = null, [CallerMemberName] string? memberName = null) where TCallerClassType : class + // => Error(text, ex, typeof(TCallerClassType).Name, memberName); public virtual void Error(string? text, Exception? ex = null, string? categoryName = null, [CallerMemberName] string? memberName = null) { if (LogLevel <= LogLevel.Error) LogWriters.ForEach(x => x.Error(text, ex, categoryName ?? CategoryName, memberName)); } - //public virtual void Error(string? text, Exception? ex = null, [CallerMemberName] string? memberName = null) where TCallerClassType : class - // => Error(text, ex, typeof(TCallerClassType).Name, memberName); + public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName) + => Write(appType, logLevel, logText, callerMemberName, categoryName, null, null); + + public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, Exception? ex) + => Write(appType, logLevel, logText, callerMemberName, categoryName, ex?.GetType().Name, ex?.ToString()); + + public virtual void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage) + { + if (LogLevel <= logLevel) LogWriters.ForEach(x => x.Write(appType, logLevel, logText, callerMemberName, categoryName ?? CategoryName, errorType, exMessage)); + } } \ No newline at end of file diff --git a/AyCode.Core/Loggers/AcTextLogWriterBase.cs b/AyCode.Core/Loggers/AcTextLogWriterBase.cs index a02e5ef..1e6adac 100644 --- a/AyCode.Core/Loggers/AcTextLogWriterBase.cs +++ b/AyCode.Core/Loggers/AcTextLogWriterBase.cs @@ -3,7 +3,10 @@ using AyCode.Utils.Extensions; namespace AyCode.Core.Loggers; -public abstract class AcTextLogWriterBase : AcLogWriterBase +public interface IAcTextLogWriterBase : IAcLogWriterBase +{} + +public abstract class AcTextLogWriterBase : AcLogWriterBase, IAcTextLogWriterBase { protected AcTextLogWriterBase() : this(null) { } @@ -14,11 +17,11 @@ public abstract class AcTextLogWriterBase : AcLogWriterBase protected AcTextLogWriterBase(AppType appType, LogLevel logLevel, string? categoryName = null) : base(appType, logLevel, categoryName) { } - protected override void PrepareToWrite(LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName = null, Exception? ex = null) + public override void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? ex) { if (logLevel < LogLevel) return; - WriteText(GetDiagnosticText(logLevel, logText, callerMemberName, categoryName)); + WriteText(GetDiagnosticText(appType, logLevel, logText, callerMemberName, categoryName, null, null)); } @@ -27,23 +30,29 @@ public abstract class AcTextLogWriterBase : AcLogWriterBase throw new NotImplementedException(); } - protected virtual string GetDiagnosticText(LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName = null, Exception? ex = null) + => GetDiagnosticText(AppType, logLevel, logText, callerMemberName, categoryName, ex?.GetType().Name, ex?.ToString()); + + protected virtual string GetDiagnosticText(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage) { if (LogLevel > logLevel) return string.Empty; var threadId = Environment.CurrentManagedThreadId; - if(categoryName.IsNullOrWhiteSpace()) categoryName = "..."; + if(categoryName.IsNullOrWhiteSpace()) categoryName = CategoryName; - return $"[{DateTime.Now:HH:mm:ss.fff}] [{AppType.ToString()[0]}] {"[" + logLevel + "]",-9} {"[" + categoryName + "->" + callerMemberName + "]",-54} {"[" + threadId + "]",5} {logText}{ErrorText(ex)}"; + return $"[{DateTime.Now:HH:mm:ss.fff}] [{appType.ToString()[0]}] {"[" + logLevel + "]",-9} {"[" + categoryName + "->" + callerMemberName + "]",-54} {"[" + threadId + "]",5} {logText}{ErrorText(errorType, exMessage)}"; } protected virtual string ErrorText(Exception? ex) { - if (ex == null) return string.Empty; + return ex == null ? string.Empty : ErrorText(ex.GetType().Name, ex.ToString()); + } - var errorType = ex.GetType().Name; - return string.IsNullOrWhiteSpace(errorType) ? string.Empty : $"{Environment.NewLine}[{errorType.ToUpper()}]: {ex}"; + protected virtual string ErrorText(string? errorType, string? exMessage) + { + if (errorType.IsNullOrWhiteSpace() && exMessage.IsNullOrWhiteSpace()) return string.Empty; + + return string.IsNullOrWhiteSpace(errorType) ? string.Empty : $"{Environment.NewLine}[{errorType.ToUpper()}]: {exMessage}"; } } \ No newline at end of file diff --git a/AyCode.Core/Loggers/IAcLogWriterBase.cs b/AyCode.Core/Loggers/IAcLogWriterBase.cs index 216f495..a0c5c4a 100644 --- a/AyCode.Core/Loggers/IAcLogWriterBase.cs +++ b/AyCode.Core/Loggers/IAcLogWriterBase.cs @@ -1,4 +1,5 @@ -using System.Runtime.CompilerServices; +using AyCode.Core.Enums; +using System.Runtime.CompilerServices; namespace AyCode.Core.Loggers; @@ -23,4 +24,9 @@ public interface IAcLogWriterBase public void Error(string? text, Exception? ex = null, string? categoryName = null, [CallerMemberName] string? memberName = null); //public void Error(string? text, Exception? ex = null, [CallerMemberName] string? memberName = null) where TCallerClassType : class; + + public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName); + public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, Exception? ex); + public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage); + } \ No newline at end of file diff --git a/AyCode.Database/AcDbLogItemWriter.cs b/AyCode.Database/AcDbLogItemWriter.cs index 0afe982..d3b7ab6 100644 --- a/AyCode.Database/AcDbLogItemWriter.cs +++ b/AyCode.Database/AcDbLogItemWriter.cs @@ -5,6 +5,7 @@ using AyCode.Core.Loggers; using AyCode.Database.DbContexts.Loggers; using AyCode.Entities; using AyCode.Entities.LogItems; +using AyCode.Entities.Server.LogItems; using AyCode.Interfaces.Entities; namespace AyCode.Database; @@ -23,20 +24,10 @@ public class AcDbLogItemWriter : AcLogItemWriterBase public AcDbLogItemWriter(AppType appType, LogLevel logLevel, string? categoryName = null) : base(appType, logLevel, categoryName) { } - protected override void WriteLogItem(TLogItem logItem, Action? callback = null) + protected override void WriteLogItemCallback(TLogItem logItem) { - try - { - base.WriteLogItem(logItem, () => - { - _ctx.LogItems.Add(logItem); - _ctx.SaveChanges(); - }); - } - catch (Exception ex) - { - Console.WriteLine("ERRORORROROR! " + AcEnv.NL + ex.Message); - } + _ctx.LogItems.Add(logItem); + _ctx.SaveChanges(); } //protected override void WriteLogItem(TLogItem logItem, Action>? callback = null) diff --git a/AyCode.Database/DbContexts/Loggers/AcLoggerDbContextBase.cs b/AyCode.Database/DbContexts/Loggers/AcLoggerDbContextBase.cs index 3afe9c0..26caf5c 100644 --- a/AyCode.Database/DbContexts/Loggers/AcLoggerDbContextBase.cs +++ b/AyCode.Database/DbContexts/Loggers/AcLoggerDbContextBase.cs @@ -1,5 +1,6 @@ using AyCode.Database.DbSets.Loggers; using AyCode.Entities.LogItems; +using AyCode.Entities.Server.LogItems; using AyCode.Interfaces.Entities; using Microsoft.EntityFrameworkCore; diff --git a/AyCode.Database/DbContexts/Loggers/IAcLoggerDbContextBase.cs b/AyCode.Database/DbContexts/Loggers/IAcLoggerDbContextBase.cs index e9f69a5..325ccdc 100644 --- a/AyCode.Database/DbContexts/Loggers/IAcLoggerDbContextBase.cs +++ b/AyCode.Database/DbContexts/Loggers/IAcLoggerDbContextBase.cs @@ -1,5 +1,6 @@ using AyCode.Database.DbSets.Loggers; using AyCode.Entities.LogItems; +using AyCode.Entities.Server.LogItems; using AyCode.Interfaces.Entities; namespace AyCode.Database.DbContexts.Loggers; diff --git a/AyCode.Database/DbSets/Loggers/IAcLogItemDbSetBase.cs b/AyCode.Database/DbSets/Loggers/IAcLogItemDbSetBase.cs index dfa0e0e..75b5e9e 100644 --- a/AyCode.Database/DbSets/Loggers/IAcLogItemDbSetBase.cs +++ b/AyCode.Database/DbSets/Loggers/IAcLogItemDbSetBase.cs @@ -1,4 +1,5 @@ using AyCode.Entities.LogItems; +using AyCode.Entities.Server.LogItems; using AyCode.Interfaces.Entities; using AyCode.Interfaces.Users; using Microsoft.EntityFrameworkCore; diff --git a/AyCode.Entities.Server/AyCode.Entities.Server.csproj b/AyCode.Entities.Server/AyCode.Entities.Server.csproj index 46fad1b..cd7adb0 100644 --- a/AyCode.Entities.Server/AyCode.Entities.Server.csproj +++ b/AyCode.Entities.Server/AyCode.Entities.Server.csproj @@ -7,6 +7,8 @@ + + diff --git a/AyCode.Entities.Server/LogItems/AcLogItem.cs b/AyCode.Entities.Server/LogItems/AcLogItem.cs new file mode 100644 index 0000000..71363f9 --- /dev/null +++ b/AyCode.Entities.Server/LogItems/AcLogItem.cs @@ -0,0 +1,22 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using AyCode.Core.Enums; +using AyCode.Core.Loggers; +using AyCode.Entities.LogItems; + +namespace AyCode.Entities.Server.LogItems; + +[Table("LogItem")] +public class AcLogItem : AcLogItemClient, IAcLogItem +{ + [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + public int LogHeaderId { get; set; } + public DateTime TimeStampUtc { get; set; } + + public AcLogItem() + { + TimeStampUtc = DateTime.UtcNow; + } +} \ No newline at end of file diff --git a/AyCode.Entities.Server/LogItems/IAcLogItem.cs b/AyCode.Entities.Server/LogItems/IAcLogItem.cs new file mode 100644 index 0000000..556665d --- /dev/null +++ b/AyCode.Entities.Server/LogItems/IAcLogItem.cs @@ -0,0 +1,12 @@ +using AyCode.Core.Enums; +using AyCode.Core.Loggers; +using AyCode.Entities.LogItems; +using AyCode.Interfaces.Entities; + +namespace AyCode.Entities.Server.LogItems; + +public interface IAcLogItem : IAcLogItemClient, IEntityInt +{ + public int LogHeaderId { get; set; } + public DateTime TimeStampUtc { get; set; } +} \ No newline at end of file diff --git a/AyCode.Entities/AcLogItemWriterBase.cs b/AyCode.Entities/AcLogItemWriterBase.cs index ca19a99..41c8879 100644 --- a/AyCode.Entities/AcLogItemWriterBase.cs +++ b/AyCode.Entities/AcLogItemWriterBase.cs @@ -5,10 +5,11 @@ using AyCode.Entities.LogItems; using AyCode.Interfaces.Entities; using AyCode.Utils.Extensions; using System.Collections.Concurrent; +using AyCode.Core.Consts; namespace AyCode.Entities; -public abstract class AcLogItemWriterBase : AcLogWriterBase where TLogItem : class, IAcLogItem +public abstract class AcLogItemWriterBase : AcLogWriterBase where TLogItem : class, IAcLogItemClient { protected readonly Mutex MutexLock = new();//new(false, "GLOBAL"); @@ -22,38 +23,62 @@ public abstract class AcLogItemWriterBase : AcLogWriterBase where TLog { } - protected TLogItem CreateLogItem(int threadId, DateTime utcNow, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName = null, Exception? ex = null) + protected virtual TLogItem CreateLogItem(AppType appType, int threadId, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName = null, string? errorType = null, string? exMessage = null) { var logItem = Activator.CreateInstance(); - logItem.TimeStampUtc = utcNow; - logItem.AppType = AppType; + logItem.AppType = appType; logItem.LogLevel = logLevel; - logItem.CategoryName = categoryName; + logItem.CategoryName = categoryName ?? CategoryName; logItem.CallerName = callerMemberName; logItem.Text = logText; - logItem.Exception = ex?.Message; logItem.ThreadId = threadId; + logItem.ErrorType = errorType; + logItem.Exception = exMessage; + return logItem; } - protected override void PrepareToWrite(LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName = null, Exception? ex = null) + public override void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage) + => WriteAsync(appType, logLevel, logText, callerMemberName, categoryName, errorType, exMessage); + + protected virtual void WriteAsync(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage) { if (logLevel < LogLevel) return; - var utcNow = DateTime.UtcNow; var threadId = Environment.CurrentManagedThreadId; - TaskHelper.RunOnThreadPool(() => WriteLogItem(CreateLogItem(threadId, utcNow, logLevel, logText, callerMemberName, categoryName))); + TaskHelper.RunOnThreadPool(() => WriteLogItem(CreateLogItem(appType, threadId, logLevel, logText, callerMemberName, categoryName, errorType, exMessage))); } - protected virtual void WriteLogItem(TLogItem logItem, Action? callback = null) + public void WriteLogItemAsync(TLogItem logItem) { - using (MutexLock.UseWaitOne()) + if (logItem.LogLevel < LogLevel) return; + + TaskHelper.RunOnThreadPool(() => WriteLogItem(logItem)); + } + + public void WriteLogItem(TLogItem logItem) + { + try { - callback?.Invoke(); + if (logItem.LogLevel < LogLevel) return; + + using (MutexLock.UseWaitOne()) + { + WriteLogItemCallback(logItem); + } } + catch (Exception ex) + { + Console.WriteLine("ERRORORROROR! " + AcEnv.NL + ex); + } + } + + protected virtual void WriteLogItemCallback(TLogItem logItem) + { + throw new NotImplementedException(); } //private volatile bool _isLocked = false; diff --git a/AyCode.Entities/AyCode.Entities.csproj b/AyCode.Entities/AyCode.Entities.csproj index 02a1e29..1437f67 100644 --- a/AyCode.Entities/AyCode.Entities.csproj +++ b/AyCode.Entities/AyCode.Entities.csproj @@ -12,7 +12,6 @@ - diff --git a/AyCode.Entities/LogItems/AcLogItem.cs b/AyCode.Entities/LogItems/AcLogItemClient.cs similarity index 68% rename from AyCode.Entities/LogItems/AcLogItem.cs rename to AyCode.Entities/LogItems/AcLogItemClient.cs index c3182d1..0cf693c 100644 --- a/AyCode.Entities/LogItems/AcLogItem.cs +++ b/AyCode.Entities/LogItems/AcLogItemClient.cs @@ -6,19 +6,14 @@ using AyCode.Core.Loggers; namespace AyCode.Entities.LogItems; -[Table("LogItem")] -public class AcLogItem : IAcLogItem +public class AcLogItemClient : IAcLogItemClient { - [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - - public int LogHeaderId { get; set; } - public DateTime TimeStampUtc { get; set; } public AppType AppType { get; set; } public LogLevel LogLevel { get; set; } public int ThreadId { get; set; } public string? CategoryName { get; set; } public string? CallerName { get; set; } public string? Text { get; set; } + public string? ErrorType { get; set; } public string? Exception { get; set; } } \ No newline at end of file diff --git a/AyCode.Entities/LogItems/IAcLogItem.cs b/AyCode.Entities/LogItems/IAcLogItemClient.cs similarity index 76% rename from AyCode.Entities/LogItems/IAcLogItem.cs rename to AyCode.Entities/LogItems/IAcLogItemClient.cs index 1664ac7..3d6f59d 100644 --- a/AyCode.Entities/LogItems/IAcLogItem.cs +++ b/AyCode.Entities/LogItems/IAcLogItemClient.cs @@ -4,10 +4,8 @@ using AyCode.Interfaces.Entities; namespace AyCode.Entities.LogItems; -public interface IAcLogItem : IEntityInt +public interface IAcLogItemClient { - public int LogHeaderId { get; set; } - public DateTime TimeStampUtc { get; set; } public AppType AppType { get; set; } public LogLevel LogLevel { get; set; } public int ThreadId { get; set; } @@ -15,4 +13,5 @@ public interface IAcLogItem : IEntityInt public string? CallerName { get; set; } public string? Text { get; set; } public string? Exception { get; set; } + public string? ErrorType { get; set; } } \ No newline at end of file diff --git a/AyCode.Services/Loggers/AcHttpClientLogItemWriter.cs b/AyCode.Services/Loggers/AcHttpClientLogItemWriter.cs index 096d1f6..e0b14be 100644 --- a/AyCode.Services/Loggers/AcHttpClientLogItemWriter.cs +++ b/AyCode.Services/Loggers/AcHttpClientLogItemWriter.cs @@ -8,7 +8,7 @@ using System; namespace AyCode.Services.Loggers; -public abstract class AcHttpClientLogItemWriter : AcLogItemWriterBase where TLogItem : class, IAcLogItem +public abstract class AcHttpClientLogItemWriter : AcLogItemWriterBase where TLogItem : class, IAcLogItemClient { protected HttpClient _httpClient; protected readonly HttpClientHandler _httpClientHandler;