[성현모] Log4net 개선
This commit is contained in:
Binary file not shown.
@ -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()
|
||||
{
|
||||
@ -62,11 +75,11 @@ public static class Log4net
|
||||
if (File.Exists(log4netConfigPath) == true)
|
||||
{
|
||||
File.Delete(log4netConfigPath);
|
||||
|
||||
Console.WriteLine($"Create log4netConfig: {log4netConfigPath}");
|
||||
File.WriteAllText(log4netConfigPath, Config);
|
||||
}
|
||||
|
||||
Console.WriteLine($"Create log4netConfig: {log4netConfigPath}");
|
||||
File.WriteAllText(log4netConfigPath, Config);
|
||||
|
||||
IsConfigLoad = OpenConfig(log4netConfigPath);
|
||||
}
|
||||
|
||||
@ -94,7 +107,53 @@ public static class Log4net
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void WriteLine<T>(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>(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.DB:
|
||||
case LogType.Exception:
|
||||
{
|
||||
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
||||
if (t != null)
|
||||
{
|
||||
Manager?.Logger.Log(t, Log4netCustomLevel.DB, log, null);
|
||||
if (trace == true)
|
||||
{
|
||||
Manager?.Logger.Log(t, Log4netCustomLevel.EXCEPTION, $"{strTrace}", null);
|
||||
}
|
||||
Manager?.Logger.Log(t, Log4netCustomLevel.EXCEPTION, log, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LogType.DB:
|
||||
{
|
||||
if(IsDBEnabled == true)
|
||||
{
|
||||
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 = @$"<?xml version=""1.0"" encoding=""utf-8"" ?>
|
||||
<configuration>
|
||||
@ -188,7 +319,7 @@ public static class Log4net
|
||||
|
||||
<appender name=""Console"" type=""log4net.Appender.ManagedColoredConsoleAppender"">
|
||||
<layout type=""log4net.Layout.PatternLayout"">
|
||||
<conversionPattern value=""[%date] [%thread] %-6level: %message%newline"" />
|
||||
<conversionPattern value=""[%date] [%thread] %-2level: %message%newline"" />
|
||||
</layout>
|
||||
<mapping>
|
||||
<level value=""FATAL"" />
|
||||
@ -212,6 +343,10 @@ public static class Log4net
|
||||
<foreColor value=""Blue"" />
|
||||
</mapping>
|
||||
|
||||
<mapping>
|
||||
<level value=""EXCEPTION"" />
|
||||
<foreColor value=""DarkRed"" />
|
||||
</mapping>
|
||||
<mapping>
|
||||
<level value=""DB"" />
|
||||
<foreColor value=""DarkMagenta"" />
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
<appender name="Console" type="log4net.Appender.ManagedColoredConsoleAppender">
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<conversionPattern value="[%date] [%thread] %-6level: %message%newline" />
|
||||
<conversionPattern value="[%date] [%thread] %-2level: %message%newline" />
|
||||
</layout>
|
||||
<mapping>
|
||||
<level value="FATAL" />
|
||||
@ -34,6 +34,10 @@
|
||||
<foreColor value="Blue" />
|
||||
</mapping>
|
||||
|
||||
<mapping>
|
||||
<level value="EXCEPTION" />
|
||||
<foreColor value="DarkRed" />
|
||||
</mapping>
|
||||
<mapping>
|
||||
<level value="DB" />
|
||||
<foreColor value="DarkMagenta" />
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@ string configDir = @"../Config";
|
||||
if (Log4net.IsConfigLoad == true)
|
||||
{
|
||||
Log4net.WriteLine("Log4net Init Success");
|
||||
Log4net.AutoRemoveLog();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ string configDir = @"../Config";
|
||||
if (Log4net.IsConfigLoad == true)
|
||||
{
|
||||
Log4net.WriteLine("Log4net Init Success");
|
||||
Log4net.AutoRemoveLog();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user