[성현모] Log4net 개선
This commit is contained in:
Binary file not shown.
@ -19,6 +19,8 @@ public enum LogType
|
|||||||
Fatal = 4,
|
Fatal = 4,
|
||||||
|
|
||||||
//custom level
|
//custom level
|
||||||
|
Exception = 7,
|
||||||
|
|
||||||
DB = 10,
|
DB = 10,
|
||||||
|
|
||||||
HTTP = 20,
|
HTTP = 20,
|
||||||
@ -30,6 +32,7 @@ public enum LogType
|
|||||||
#region CustomLevel
|
#region CustomLevel
|
||||||
public static class Log4netCustomLevel
|
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 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 HTTP = new log4net.Core.Level(10020, LogType.HTTP.ToString());
|
||||||
public static readonly log4net.Core.Level SOCKET = new log4net.Core.Level(10021, LogType.SOCKET.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)
|
public static void SetCustomLevel(ILoggerRepository repo)
|
||||||
{
|
{
|
||||||
|
repo.LevelMap.Add(EXCEPTION);
|
||||||
repo.LevelMap.Add(DB);
|
repo.LevelMap.Add(DB);
|
||||||
repo.LevelMap.Add(HTTP);
|
repo.LevelMap.Add(HTTP);
|
||||||
repo.LevelMap.Add(SOCKET);
|
repo.LevelMap.Add(SOCKET);
|
||||||
@ -53,7 +57,16 @@ public static class Log4net
|
|||||||
|
|
||||||
public static bool IsConfigLoad { get; set; } = false;
|
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()
|
static Log4net()
|
||||||
{
|
{
|
||||||
@ -62,11 +75,11 @@ public static class Log4net
|
|||||||
if (File.Exists(log4netConfigPath) == true)
|
if (File.Exists(log4netConfigPath) == true)
|
||||||
{
|
{
|
||||||
File.Delete(log4netConfigPath);
|
File.Delete(log4netConfigPath);
|
||||||
|
|
||||||
Console.WriteLine($"Create log4netConfig: {log4netConfigPath}");
|
|
||||||
File.WriteAllText(log4netConfigPath, Config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Console.WriteLine($"Create log4netConfig: {log4netConfigPath}");
|
||||||
|
File.WriteAllText(log4netConfigPath, Config);
|
||||||
|
|
||||||
IsConfigLoad = OpenConfig(log4netConfigPath);
|
IsConfigLoad = OpenConfig(log4netConfigPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +107,53 @@ public static class Log4net
|
|||||||
return result;
|
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)
|
if (IsConfigLoad == false)
|
||||||
{
|
{
|
||||||
@ -103,78 +162,150 @@ public static class Log4net
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(log is Exception ex)
|
||||||
|
{
|
||||||
|
WriteLineException(ex, memberName, sourceFilePath, sourceLineNumber);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string strTrace = $"TRACE::[{Path.GetFileName(sourceFilePath)}][Method:{memberName}][LINE:{sourceLineNumber}]";
|
||||||
|
|
||||||
switch (logType)
|
switch (logType)
|
||||||
{
|
{
|
||||||
case LogType.Info:
|
case LogType.Info:
|
||||||
{
|
{
|
||||||
|
if (trace == true)
|
||||||
|
{
|
||||||
|
Manager?.Info($"{strTrace}");
|
||||||
|
}
|
||||||
Manager?.Info(log);
|
Manager?.Info(log);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.Warn:
|
case LogType.Warn:
|
||||||
{
|
{
|
||||||
|
if (trace == true)
|
||||||
|
{
|
||||||
|
Manager?.Warn($"{strTrace}");
|
||||||
|
}
|
||||||
Manager?.Warn(log);
|
Manager?.Warn(log);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.Error:
|
case LogType.Error:
|
||||||
{
|
{
|
||||||
|
if (trace == true)
|
||||||
|
{
|
||||||
|
Manager?.Error($"{strTrace}");
|
||||||
|
}
|
||||||
Manager?.Error(log);
|
Manager?.Error(log);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.Debug:
|
case LogType.Debug:
|
||||||
{
|
{
|
||||||
Manager?.Debug(log);
|
if (IsDebugEnabled == true)
|
||||||
|
{
|
||||||
|
if (trace == true)
|
||||||
|
{
|
||||||
|
Manager?.Debug($"{strTrace}");
|
||||||
|
}
|
||||||
|
Manager?.Debug(log);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.Fatal:
|
case LogType.Fatal:
|
||||||
{
|
{
|
||||||
|
Manager?.Fatal($"{strTrace}");
|
||||||
Manager?.Fatal(log);
|
Manager?.Fatal(log);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.DB:
|
case LogType.Exception:
|
||||||
{
|
{
|
||||||
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
||||||
if (t != null)
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.HTTP:
|
case LogType.HTTP:
|
||||||
{
|
{
|
||||||
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
if(IsHttpEnabled == true)
|
||||||
if (t != null)
|
|
||||||
{
|
{
|
||||||
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;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.SOCKET:
|
case LogType.SOCKET:
|
||||||
{
|
{
|
||||||
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
if(IsSocketEnabled == true)
|
||||||
if (t != null)
|
|
||||||
{
|
{
|
||||||
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;
|
break;
|
||||||
}
|
}
|
||||||
case LogType.CONTROLLER:
|
case LogType.CONTROLLER:
|
||||||
{
|
{
|
||||||
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
if(IsControllerEnabled == true)
|
||||||
if (t != null)
|
|
||||||
{
|
{
|
||||||
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;
|
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
|
#region Config
|
||||||
static string Config = @$"<?xml version=""1.0"" encoding=""utf-8"" ?>
|
static string Config = @$"<?xml version=""1.0"" encoding=""utf-8"" ?>
|
||||||
<configuration>
|
<configuration>
|
||||||
@ -188,7 +319,7 @@ public static class Log4net
|
|||||||
|
|
||||||
<appender name=""Console"" type=""log4net.Appender.ManagedColoredConsoleAppender"">
|
<appender name=""Console"" type=""log4net.Appender.ManagedColoredConsoleAppender"">
|
||||||
<layout type=""log4net.Layout.PatternLayout"">
|
<layout type=""log4net.Layout.PatternLayout"">
|
||||||
<conversionPattern value=""[%date] [%thread] %-6level: %message%newline"" />
|
<conversionPattern value=""[%date] [%thread] %-2level: %message%newline"" />
|
||||||
</layout>
|
</layout>
|
||||||
<mapping>
|
<mapping>
|
||||||
<level value=""FATAL"" />
|
<level value=""FATAL"" />
|
||||||
@ -212,6 +343,10 @@ public static class Log4net
|
|||||||
<foreColor value=""Blue"" />
|
<foreColor value=""Blue"" />
|
||||||
</mapping>
|
</mapping>
|
||||||
|
|
||||||
|
<mapping>
|
||||||
|
<level value=""EXCEPTION"" />
|
||||||
|
<foreColor value=""DarkRed"" />
|
||||||
|
</mapping>
|
||||||
<mapping>
|
<mapping>
|
||||||
<level value=""DB"" />
|
<level value=""DB"" />
|
||||||
<foreColor value=""DarkMagenta"" />
|
<foreColor value=""DarkMagenta"" />
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<appender name="Console" type="log4net.Appender.ManagedColoredConsoleAppender">
|
<appender name="Console" type="log4net.Appender.ManagedColoredConsoleAppender">
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="[%date] [%thread] %-6level: %message%newline" />
|
<conversionPattern value="[%date] [%thread] %-2level: %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
<mapping>
|
<mapping>
|
||||||
<level value="FATAL" />
|
<level value="FATAL" />
|
||||||
@ -34,6 +34,10 @@
|
|||||||
<foreColor value="Blue" />
|
<foreColor value="Blue" />
|
||||||
</mapping>
|
</mapping>
|
||||||
|
|
||||||
|
<mapping>
|
||||||
|
<level value="EXCEPTION" />
|
||||||
|
<foreColor value="DarkRed" />
|
||||||
|
</mapping>
|
||||||
<mapping>
|
<mapping>
|
||||||
<level value="DB" />
|
<level value="DB" />
|
||||||
<foreColor value="DarkMagenta" />
|
<foreColor value="DarkMagenta" />
|
||||||
|
|||||||
@ -60,7 +60,7 @@ namespace VPKI.Library.Static
|
|||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
Log4net.WriteLine("Document4net ExportToCsv Exception",LogType.Error);
|
Log4net.WriteLine("Document4net ExportToCsv Exception", LogType.Exception);
|
||||||
Log4net.WriteLine(ex);
|
Log4net.WriteLine(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,6 +22,7 @@ string configDir = @"../Config";
|
|||||||
if (Log4net.IsConfigLoad == true)
|
if (Log4net.IsConfigLoad == true)
|
||||||
{
|
{
|
||||||
Log4net.WriteLine("Log4net Init Success");
|
Log4net.WriteLine("Log4net Init Success");
|
||||||
|
Log4net.AutoRemoveLog();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -163,7 +163,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log4net.WriteLine($"Select User Transaction Error", LogType.Error);
|
Log4net.WriteLine($"Select User Transaction Error", LogType.Exception);
|
||||||
Log4net.WriteLine(e);
|
Log4net.WriteLine(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -189,7 +189,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Error);
|
Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Exception);
|
||||||
Log4net.WriteLine(e);
|
Log4net.WriteLine(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -200,7 +200,7 @@ namespace VPKI.Web.Api.Services
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Error);
|
Log4net.WriteLine($"RequestCertificate Exception::{csr.CHashedTbscsr}", LogType.Exception);
|
||||||
Log4net.WriteLine(e);
|
Log4net.WriteLine(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,7 @@ string configDir = @"../Config";
|
|||||||
if (Log4net.IsConfigLoad == true)
|
if (Log4net.IsConfigLoad == true)
|
||||||
{
|
{
|
||||||
Log4net.WriteLine("Log4net Init Success");
|
Log4net.WriteLine("Log4net Init Success");
|
||||||
|
Log4net.AutoRemoveLog();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user