From 0a999434f047735bf01319818745fa0c5b0653e2 Mon Sep 17 00:00:00 2001 From: SHM Date: Wed, 30 Apr 2025 14:13:58 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=84=B1=ED=98=84=EB=AA=A8]=20Log4net=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/DLL/SystemX.Core.dll | Bin 34816 -> 41472 bytes .../SystemX.Core/Log4net/Log4net.cs | 187 +++++++++++++++--- Projects/VPKI/VPKI/Config/log4net.config | 6 +- .../VPKI/VPKI.Library/Static/Document4net.cs | 2 +- Projects/VPKI/VPKI/VPKI.Web.Api/Program.cs | 1 + .../VPKI/VPKI.Web.Api/Services/AuthService.cs | 2 +- .../Services/ISO15118_02Service.cs | 2 +- .../Services/ISO15118_20Service.cs | 2 +- Projects/VPKI/VPKI/VPKI.Web.Client/Program.cs | 3 +- 9 files changed, 173 insertions(+), 32 deletions(-) diff --git a/Projects/DLL/SystemX.Core.dll b/Projects/DLL/SystemX.Core.dll index 0fc5670d4db76921b350f3a8700153955edac653..637fb5e0fdf565ce68a5553d4a01eee86e62d287 100644 GIT binary patch literal 41472 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 D@8GNg literal 34816 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 L|F50@5gPdas@IVv diff --git a/Projects/SystemX.Core/SystemX.Core/Log4net/Log4net.cs b/Projects/SystemX.Core/SystemX.Core/Log4net/Log4net.cs index dd165c3..0ddf274 100644 --- a/Projects/SystemX.Core/SystemX.Core/Log4net/Log4net.cs +++ b/Projects/SystemX.Core/SystemX.Core/Log4net/Log4net.cs @@ -19,6 +19,8 @@ public enum LogType Fatal = 4, //custom level + Exception = 7, + DB = 10, HTTP = 20, @@ -30,6 +32,7 @@ public enum LogType #region CustomLevel public static class Log4netCustomLevel { + public static readonly log4net.Core.Level EXCEPTION = new log4net.Core.Level(10007, LogType.Exception.ToString()); public static readonly log4net.Core.Level DB = new log4net.Core.Level(10010, LogType.DB.ToString()); public static readonly log4net.Core.Level HTTP = new log4net.Core.Level(10020, LogType.HTTP.ToString()); public static readonly log4net.Core.Level SOCKET = new log4net.Core.Level(10021, LogType.SOCKET.ToString()); @@ -37,6 +40,7 @@ public static class Log4netCustomLevel public static void SetCustomLevel(ILoggerRepository repo) { + repo.LevelMap.Add(EXCEPTION); repo.LevelMap.Add(DB); repo.LevelMap.Add(HTTP); repo.LevelMap.Add(SOCKET); @@ -53,7 +57,16 @@ public static class Log4net public static bool IsConfigLoad { get; set; } = false; + //로그 사용여부 + public static bool IsDebugEnabled { get; set; } = true; + public static bool IsDBEnabled { get; set; } = true; + public static bool IsHttpEnabled { get; set; } = true; + public static bool IsSocketEnabled { get; set; } = true; + public static bool IsControllerEnabled { get; set; } = true; + //자동삭제 + private static bool AutoRemove { get; set; } = false; + private static int AutoRemoveKeepingDay = 30; static Log4net() { @@ -61,13 +74,13 @@ public static class Log4net if (File.Exists(log4netConfigPath) == true) { - File.Delete(log4netConfigPath); - - Console.WriteLine($"Create log4netConfig: {log4netConfigPath}"); - File.WriteAllText(log4netConfigPath, Config); + File.Delete(log4netConfigPath); } - IsConfigLoad = OpenConfig(log4netConfigPath); + Console.WriteLine($"Create log4netConfig: {log4netConfigPath}"); + File.WriteAllText(log4netConfigPath, Config); + + IsConfigLoad = OpenConfig(log4netConfigPath); } private static bool OpenConfig(string path) @@ -94,7 +107,53 @@ public static class Log4net return result; } - public static void WriteLine(T log, LogType logType = LogType.Info) + public static void AutoRemoveLog(int autoRemoveKeepingDay = 30) + { + if (AutoRemove == false) + { + AutoRemove = true; + AutoRemoveKeepingDay = autoRemoveKeepingDay; + + string logDirectory = @$"{Path.GetDirectoryName(Environment.ProcessPath)}\log"; + Log4net.WriteLine($"Log4net Auto Remove: {AutoRemove}, Remove Day: -{AutoRemoveKeepingDay}", LogType.Warn); + Log4net.WriteLine($"Log4net Auto Path: {logDirectory}", LogType.Warn); + + Task.Run(async () => + { + //1분후 시작 + await Task.Delay(TimeSpan.FromMinutes(1)); + while (true) + { + var files = Directory.GetFiles(logDirectory, "*.log", SearchOption.AllDirectories); + foreach (var file in files) + { + var lastAccessDateTime = File.GetLastWriteTime(file); + if (lastAccessDateTime < DateTime.Now.AddDays(AutoRemoveKeepingDay * -1)) + { + try + { + //File.Delete(file); + WriteLine($"Remove log: {Path.GetFileName(file)}", LogType.Warn); + } + catch + { + WriteLine($"Using log file: {Path.GetFileName(file)}", LogType.Warn); + } + } + } + + //일정시간마다 반복 + Log4net.WriteLine($"Log Auto Remove Run", LogType.Warn); + await Task.Delay(TimeSpan.FromHours(12)); + } + }); + } + } + + public static void WriteLine(T log, LogType logType = LogType.Info, bool trace = false, + [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", + [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", + [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0) { if (IsConfigLoad == false) { @@ -103,78 +162,150 @@ public static class Log4net return; } + if(log is Exception ex) + { + WriteLineException(ex, memberName, sourceFilePath, sourceLineNumber); + return; + } + + string strTrace = $"TRACE::[{Path.GetFileName(sourceFilePath)}][Method:{memberName}][LINE:{sourceLineNumber}]"; + switch (logType) { case LogType.Info: { + if (trace == true) + { + Manager?.Info($"{strTrace}"); + } Manager?.Info(log); break; } case LogType.Warn: { + if (trace == true) + { + Manager?.Warn($"{strTrace}"); + } Manager?.Warn(log); break; } case LogType.Error: { + if (trace == true) + { + Manager?.Error($"{strTrace}"); + } Manager?.Error(log); break; } case LogType.Debug: - { - Manager?.Debug(log); + { + if (IsDebugEnabled == true) + { + if (trace == true) + { + Manager?.Debug($"{strTrace}"); + } + Manager?.Debug(log); + } break; } case LogType.Fatal: { + Manager?.Fatal($"{strTrace}"); Manager?.Fatal(log); break; } + case LogType.Exception: + { + Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; + if (t != null) + { + if (trace == true) + { + Manager?.Logger.Log(t, Log4netCustomLevel.EXCEPTION, $"{strTrace}", null); + } + Manager?.Logger.Log(t, Log4netCustomLevel.EXCEPTION, log, null); + } + break; + } case LogType.DB: { - Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; - if (t != null) + if(IsDBEnabled == true) { - Manager?.Logger.Log(t, Log4netCustomLevel.DB, log, null); - } + Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; + if (t != null) + { + if (trace == true) + { + Manager?.Logger.Log(t, Log4netCustomLevel.DB, $"{strTrace}", null); + } + Manager?.Logger.Log(t, Log4netCustomLevel.DB, log, null); + } + } break; } case LogType.HTTP: { - Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; - if (t != null) + if(IsHttpEnabled == true) { - Manager?.Logger.Log(t, Log4netCustomLevel.HTTP, log, null); - } + Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; + if (t != null) + { + if (trace == true) + { + Manager?.Logger.Log(t, Log4netCustomLevel.HTTP, $"{strTrace}", null); + } + Manager?.Logger.Log(t, Log4netCustomLevel.HTTP, log, null); + } + } break; } case LogType.SOCKET: { - Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; - if (t != null) + if(IsSocketEnabled == true) { - Manager?.Logger.Log(t, Log4netCustomLevel.SOCKET, log, null); + Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; + if (t != null) + { + if (trace == true) + { + Manager?.Logger.Log(t, Log4netCustomLevel.SOCKET, $"{strTrace}", null); + } + Manager?.Logger.Log(t, Log4netCustomLevel.SOCKET, log, null); + } } break; } case LogType.CONTROLLER: { - Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; - if (t != null) + if(IsControllerEnabled == true) { - Manager?.Logger.Log(t, Log4netCustomLevel.CONTROLLER, log, null); + Type? t = MethodBase.GetCurrentMethod()?.DeclaringType; + if (t != null) + { + if (trace == true) + { + Manager?.Logger.Log(t, Log4netCustomLevel.CONTROLLER, $"{strTrace}", null); + } + Manager?.Logger.Log(t, Log4netCustomLevel.CONTROLLER, log, null); + } } break; } } } - public static void WriteLine(Exception? ex) + private static void WriteLineException(Exception? ex, + [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", + [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", + [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0) { - WriteLine(ex?.Message, LogType.Error); + WriteLine($"TRACE::[{Path.GetFileName(sourceFilePath)}][Method:{memberName}][LINE:{sourceLineNumber}]", LogType.Exception); + WriteLine(ex?.Message, LogType.Exception); } - #region Config static string Config = @$" @@ -188,7 +319,7 @@ public static class Log4net - + @@ -212,6 +343,10 @@ public static class Log4net + + + + diff --git a/Projects/VPKI/VPKI/Config/log4net.config b/Projects/VPKI/VPKI/Config/log4net.config index e5b8ab4..b970851 100644 --- a/Projects/VPKI/VPKI/Config/log4net.config +++ b/Projects/VPKI/VPKI/Config/log4net.config @@ -10,7 +10,7 @@ - + @@ -34,6 +34,10 @@ + + + + diff --git a/Projects/VPKI/VPKI/VPKI.Library/Static/Document4net.cs b/Projects/VPKI/VPKI/VPKI.Library/Static/Document4net.cs index c61d339..a98c2c0 100644 --- a/Projects/VPKI/VPKI/VPKI.Library/Static/Document4net.cs +++ b/Projects/VPKI/VPKI/VPKI.Library/Static/Document4net.cs @@ -60,7 +60,7 @@ namespace VPKI.Library.Static } catch(Exception ex) { - Log4net.WriteLine("Document4net ExportToCsv Exception",LogType.Error); + Log4net.WriteLine("Document4net ExportToCsv Exception", LogType.Exception); Log4net.WriteLine(ex); } diff --git a/Projects/VPKI/VPKI/VPKI.Web.Api/Program.cs b/Projects/VPKI/VPKI/VPKI.Web.Api/Program.cs index bed3e60..f6d75fa 100644 --- a/Projects/VPKI/VPKI/VPKI.Web.Api/Program.cs +++ b/Projects/VPKI/VPKI/VPKI.Web.Api/Program.cs @@ -22,6 +22,7 @@ string configDir = @"../Config"; if (Log4net.IsConfigLoad == true) { Log4net.WriteLine("Log4net Init Success"); + Log4net.AutoRemoveLog(); } else { diff --git a/Projects/VPKI/VPKI/VPKI.Web.Api/Services/AuthService.cs b/Projects/VPKI/VPKI/VPKI.Web.Api/Services/AuthService.cs index d4fd0ff..638c7dd 100644 --- a/Projects/VPKI/VPKI/VPKI.Web.Api/Services/AuthService.cs +++ b/Projects/VPKI/VPKI/VPKI.Web.Api/Services/AuthService.cs @@ -163,7 +163,7 @@ namespace VPKI.Web.Api.Services } catch (Exception e) { - Log4net.WriteLine($"Select User Transaction Error", LogType.Error); + Log4net.WriteLine($"Select User Transaction Error", LogType.Exception); Log4net.WriteLine(e); } } diff --git a/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_02Service.cs b/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_02Service.cs index ba845df..f7b0d5a 100644 --- a/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_02Service.cs +++ b/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_02Service.cs @@ -189,7 +189,7 @@ namespace VPKI.Web.Api.Services } catch (Exception e) { - Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Error); + Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Exception); Log4net.WriteLine(e); } } diff --git a/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_20Service.cs b/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_20Service.cs index 155a49f..7167197 100644 --- a/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_20Service.cs +++ b/Projects/VPKI/VPKI/VPKI.Web.Api/Services/ISO15118_20Service.cs @@ -200,7 +200,7 @@ namespace VPKI.Web.Api.Services } catch (Exception e) { - Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Error); + Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Exception); Log4net.WriteLine(e); } } diff --git a/Projects/VPKI/VPKI/VPKI.Web.Client/Program.cs b/Projects/VPKI/VPKI/VPKI.Web.Client/Program.cs index 1b1995a..2a9d772 100644 --- a/Projects/VPKI/VPKI/VPKI.Web.Client/Program.cs +++ b/Projects/VPKI/VPKI/VPKI.Web.Client/Program.cs @@ -10,7 +10,8 @@ string configDir = @"../Config"; if (Log4net.IsConfigLoad == true) { - Log4net.WriteLine("Log4net Init Success"); + Log4net.WriteLine("Log4net Init Success"); + Log4net.AutoRemoveLog(); } else {