From 3b941e9c7176b8ab40abd45485687283b4fd133c Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Tue, 12 Dec 2023 08:16:22 +0100 Subject: [PATCH] Add Logger; AcUserDal fix; AcUserDalTests improvements, etc... --- AyCode.Core/AyCode.Core.csproj | 4 - AyCode.Core/Enums/AppType.cs | 14 ++++ AyCode.Core/Logger/LogLevel.cs | 17 +++++ AyCode.Core/Logger/Logger.cs | 73 ++++++++++++++++--- .../Users/AcUserDalTestBase.cs | 6 +- .../DataLayers/Users/AcUserDalBase.cs | 5 +- .../DbSets/Users/AcUserDbSetExtensions.cs | 5 +- 7 files changed, 102 insertions(+), 22 deletions(-) create mode 100644 AyCode.Core/Enums/AppType.cs create mode 100644 AyCode.Core/Logger/LogLevel.cs diff --git a/AyCode.Core/AyCode.Core.csproj b/AyCode.Core/AyCode.Core.csproj index a79a53c..46fad1b 100644 --- a/AyCode.Core/AyCode.Core.csproj +++ b/AyCode.Core/AyCode.Core.csproj @@ -10,8 +10,4 @@ - - - - diff --git a/AyCode.Core/Enums/AppType.cs b/AyCode.Core/Enums/AppType.cs new file mode 100644 index 0000000..fab6d0b --- /dev/null +++ b/AyCode.Core/Enums/AppType.cs @@ -0,0 +1,14 @@ +namespace AyCode.Core.Enums +{ + public enum AppType : byte + { + None = 0, + Server = 1, + Relay = 5, + Game = 10, + Web = 15, + Mobile = 20, + Dissonance = 25, + UnitTest = 255, + } +} diff --git a/AyCode.Core/Logger/LogLevel.cs b/AyCode.Core/Logger/LogLevel.cs new file mode 100644 index 0000000..ac80d8a --- /dev/null +++ b/AyCode.Core/Logger/LogLevel.cs @@ -0,0 +1,17 @@ +namespace AyCode.Core.Logger +{ + /// + /// Az adatbásisban van egy LogLevel tábla, ha változtatunk az enum-ok értékén, akkor ott is igazítsuk hozzá! + /// + public enum LogLevel : byte + { + Detail = 0, + Trace = 5, + Debug = 10, + Info = 15, + Suggest = 17, + Warning = 20, + Error = 25, + Disabled = 255, + } +} \ No newline at end of file diff --git a/AyCode.Core/Logger/Logger.cs b/AyCode.Core/Logger/Logger.cs index 7d6ce6d..12a1483 100644 --- a/AyCode.Core/Logger/Logger.cs +++ b/AyCode.Core/Logger/Logger.cs @@ -1,32 +1,85 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using AyCode.Core.Consts; +using AyCode.Core.Enums; namespace AyCode.Core.Logger { public static class Logger { - public static void Info(string text) + public static LogLevel LogLevel { get; set; } = LogLevel.Detail; + public static AppType AppType { get; set; } = AppType.Server; + + public static void Detail(string text, [CallerMemberName] string? memberName = null) + => WriteToConsole(LogLevel.Detail, GetDiagnosticText(LogLevel.Detail, text, memberName, null)); + + public static void Debug(string text, [CallerMemberName] string? memberName = null) + => WriteToConsole(LogLevel.Debug, GetDiagnosticText(LogLevel.Debug, text, memberName, null)); + + public static void Info(string text, [CallerMemberName] string? memberName = null) + => WriteToConsole(LogLevel.Info, GetDiagnosticText(LogLevel.Info, text, memberName, null)); + + public static void Warning(string text, [CallerMemberName] string? memberName = null) + => WriteToConsole(LogLevel.Warning, GetDiagnosticText(LogLevel.Warning, text, memberName, null)); + + public static void Suggest(string text, [CallerMemberName] string? memberName = null) + => WriteToConsole(LogLevel.Suggest, GetDiagnosticText(LogLevel.Suggest, text, memberName, null)); + + public static void Error(string text, [CallerMemberName] string? memberName = null) + => WriteToConsole(LogLevel.Error, GetDiagnosticText(LogLevel.Error, text, memberName, null)); + + public static void Error(string text, Exception ex, [CallerMemberName] string? memberName = null) + => WriteToConsole(LogLevel.Error, GetDiagnosticText(LogLevel.Error, text, memberName, ex)); + + private static void WriteToConsole(LogLevel logLevel, string text) { - Console.WriteLine(text); + if (logLevel < LogLevel) return; + + //lock (ForWriterLock) + { + //if (logLevel > LogLevel.Trace && logLevel < LogLevel.Suggest) + { + Console.WriteLine(text); + return; + } + + if (logLevel <= LogLevel.Trace) + { + Console.ForegroundColor = ConsoleColor.Gray; + Console.WriteLine(text); + } + else if (logLevel == LogLevel.Suggest) + { + Console.ForegroundColor = ConsoleColor.Cyan; + Console.WriteLine(text); + } + else + { + Console.ForegroundColor = logLevel == LogLevel.Warning ? ConsoleColor.Yellow : ConsoleColor.Red; + Console.WriteLine($"{AcEnv.NL}{text}{AcEnv.NL}"); + } + + Console.ForegroundColor = ConsoleColor.White; + } } - public static void Warning(string text) + private static string GetDiagnosticText(LogLevel logLevel, string logText, string? callerName, Exception? ex) { - Console.WriteLine(text); + var threadId = Environment.CurrentManagedThreadId; + + return $"[{DateTime.Now:HH:mm:ss.fff}] [{AppType.ToString()[0]}] {"[" + logLevel + "]",-9} {"[...->" + callerName + "]",-54} {"[" + threadId + "]",5} {logText}{ErrorText(ex)}"; } - public static void Error(string text) + private static string ErrorText(Exception? ex) { - Console.WriteLine(text); - } + if (ex == null) return string.Empty; - public static void Error(string text, Exception ex) - { - Console.WriteLine($"{text}{AcEnv.NL}{ex.Message}{AcEnv.NL}{ex}"); + var errorType = ex.GetType().Name; + return string.IsNullOrWhiteSpace(errorType) ? string.Empty : $"{Environment.NewLine}[{errorType.ToUpper()}]: {ex}"; } } } diff --git a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs index 4542468..69a8536 100644 --- a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs +++ b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs @@ -14,7 +14,7 @@ namespace AyCode.Database.Tests.Users { [TestMethod] [DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")] - public void GetUserById_ReturnsUser_WhenUserExists(string userIdString) + public virtual void GetUserById_ReturnsUser_WhenUserExists(string userIdString) { var userId = Guid.Parse(userIdString); var user = Dal.GetUserById(userId); @@ -25,7 +25,7 @@ namespace AyCode.Database.Tests.Users [TestMethod] [DataRow("test@tiam.hu")] - public void GetUserByEmail_ReturnsUser_WhenUserExists(string email) + public virtual void GetUserByEmail_ReturnsUser_WhenUserExists(string email) { var user = Dal.GetUserByEmail(email); @@ -35,7 +35,7 @@ namespace AyCode.Database.Tests.Users [TestMethod] [DataRow("test@tiam.hu")] - public async Task GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email) + public virtual async Task GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email) { TUser? user = null; diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 0a11093..b5d6ef1 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -14,14 +14,11 @@ using AyCode.Database.DbSets.Users; namespace AyCode.Database.DataLayers.Users { - public abstract class AcUserDalBase : AcDalBase, IAcUserDbContextBase + public abstract class AcUserDalBase : AcDalBase where TDbContext : AcDbContextBase, IAcUserDbContextBase where TUser : class, IUserBase where TUserToken : class, IUserTokenBase { - public DbSet Users { get; set; } - public DbSet UserTokens { get; set; } - public TUser? GetUserById(Guid userId) => Session(x => x.GetUserById(userId)); public Task GetUserByIdAsync(Guid userId) => SessionAsync(x => x.GetUserById(userId)); diff --git a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs index 8910c9b..73697a3 100644 --- a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs +++ b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs @@ -1,4 +1,5 @@ -using AyCode.Interfaces.Users; +using AyCode.Core.Logger; +using AyCode.Interfaces.Users; namespace AyCode.Database.DbSets.Users; @@ -11,6 +12,8 @@ public static class AcUserDbSetExtensions public static TUser? GetUserByEmail(this IAcUserDbSet ctx, string email) where TUser : class, IUserBase { + Logger.Info($"GetUserByEmail: {email}"); + var emailLower = email.ToLower(); return ctx.Users.FirstOrDefault(u => u.EmailAddress == emailLower); }