[성현모] Log4net 기능 추가
This commit is contained in:
BIN
Projects/DLL/System.Configuration.ConfigurationManager.dll
Normal file
BIN
Projects/DLL/System.Configuration.ConfigurationManager.dll
Normal file
Binary file not shown.
BIN
Projects/DLL/SystemX.Core.dll
Normal file
BIN
Projects/DLL/SystemX.Core.dll
Normal file
Binary file not shown.
BIN
Projects/DLL/log4net.dll
Normal file
BIN
Projects/DLL/log4net.dll
Normal file
Binary file not shown.
Binary file not shown.
@ -10,4 +10,10 @@
|
|||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="SystemX.Core">
|
||||||
|
<HintPath>..\..\DLL\SystemX.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
using SystemX.Core.Log4net;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
@ -16,6 +18,9 @@ if (app.Environment.IsDevelopment())
|
|||||||
app.UseSwaggerUI();
|
app.UseSwaggerUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log4net.WriteLine("Run");
|
||||||
|
Log4net.WriteLine("Custom LogLevel",LogType.DB);
|
||||||
|
|
||||||
app.UseHttpsRedirection();
|
app.UseHttpsRedirection();
|
||||||
|
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|||||||
77
Projects/HubX/HubX.Server/log4net.config
Normal file
77
Projects/HubX/HubX.Server/log4net.config
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<log4net>
|
||||||
|
<root>
|
||||||
|
<level value="ALL"/>
|
||||||
|
<appender-ref ref="Console"/>
|
||||||
|
<appender-ref ref="file"/>
|
||||||
|
<appender-ref ref="fatal_file"/>
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<appender name="Console" type="log4net.Appender.ManagedColoredConsoleAppender">
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="[%date] [%thread] %-6level: %message%newline" />
|
||||||
|
</layout>
|
||||||
|
<mapping>
|
||||||
|
<level value="FATAL" />
|
||||||
|
<foreColor value="White" />
|
||||||
|
<backColor value="Red" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value="ERROR" />
|
||||||
|
<foreColor value="Red" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value="WARN" />
|
||||||
|
<foreColor value="Yellow" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value="INFO" />
|
||||||
|
<foreColor value="Green" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value="DEBUG" />
|
||||||
|
<foreColor value="Blue" />
|
||||||
|
</mapping>
|
||||||
|
|
||||||
|
<mapping>
|
||||||
|
<level value="DB" />
|
||||||
|
<foreColor value="DarkMagenta" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value="HTTP" />
|
||||||
|
<foreColor value="DarkYellow" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value="SOCKET" />
|
||||||
|
<foreColor value="DarkCyan" />
|
||||||
|
</mapping>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="file" type="log4net.Appender.RollingFileAppender">
|
||||||
|
<file value="log/" />
|
||||||
|
<datepattern value="yyyy////MM////yyyy-MM-dd'.log'"/>
|
||||||
|
<appendToFile value="true" />
|
||||||
|
<rollingStyle value="Date" />
|
||||||
|
<staticLogFileName value="false" />
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="[%date] [%thread] %level %logger - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="fatal_file" type="log4net.Appender.RollingFileAppender">
|
||||||
|
<file value="log/" />
|
||||||
|
<datepattern value="yyyy////MM////yyyy-MM-dd'_fatal.log'"/>
|
||||||
|
<appendToFile value="true" />
|
||||||
|
<rollingStyle value="Date" />
|
||||||
|
<staticLogFileName value="false" />
|
||||||
|
<filter type="log4net.Filter.LevelRangeFilter">
|
||||||
|
<param name="LevelMin" value="FATAL" />
|
||||||
|
<param name="LevelMax" value="FATAL" />
|
||||||
|
</filter>
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="[%date] [%thread] %level %logger - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
</log4net>
|
||||||
|
</configuration>
|
||||||
249
Projects/SystemX.Core/SystemX.Core/Log4net/Log4net.cs
Normal file
249
Projects/SystemX.Core/SystemX.Core/Log4net/Log4net.cs
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
using log4net;
|
||||||
|
using log4net.Repository;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SystemX.Core.Log4net
|
||||||
|
{
|
||||||
|
#region LogType
|
||||||
|
public enum LogType
|
||||||
|
{
|
||||||
|
//default level
|
||||||
|
Info = 0,
|
||||||
|
Warn = 1,
|
||||||
|
Error = 2,
|
||||||
|
Debug = 3,
|
||||||
|
Fatal = 4,
|
||||||
|
|
||||||
|
//custom level
|
||||||
|
DB = 10,
|
||||||
|
|
||||||
|
HTTP = 20,
|
||||||
|
SOCKET = 21,
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region CustomLevel
|
||||||
|
public static class Log4netCustomLevel
|
||||||
|
{
|
||||||
|
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());
|
||||||
|
|
||||||
|
public static void SetCustomLevel(ILoggerRepository repo)
|
||||||
|
{
|
||||||
|
repo.LevelMap.Add(DB);
|
||||||
|
repo.LevelMap.Add(HTTP);
|
||||||
|
repo.LevelMap.Add(SOCKET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public static class Log4net
|
||||||
|
{
|
||||||
|
private static ILog? Manager;
|
||||||
|
|
||||||
|
private static ILoggerRepository repo = LogManager.GetRepository();
|
||||||
|
|
||||||
|
public static bool IsConfigLoad { get; set; } = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static Log4net()
|
||||||
|
{
|
||||||
|
Console.WriteLine("log4net constructor");
|
||||||
|
if (File.Exists("./log4net.config") == false)
|
||||||
|
{
|
||||||
|
File.WriteAllText("log4net.config", Config);
|
||||||
|
}
|
||||||
|
|
||||||
|
IsConfigLoad = OpenConfig(@"./log4net.config");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool OpenConfig(string path)
|
||||||
|
{
|
||||||
|
bool result = true;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Log4netCustomLevel.SetCustomLevel(repo);
|
||||||
|
|
||||||
|
if (File.Exists(path) == false)
|
||||||
|
result = false;
|
||||||
|
|
||||||
|
log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
|
||||||
|
Manager = LogManager.GetLogger("");
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Log4net Init Error");
|
||||||
|
Console.WriteLine(e.Message);
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WriteLine<T>(T log, LogType logType = LogType.Info)
|
||||||
|
{
|
||||||
|
if (IsConfigLoad == false)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
Console.WriteLine($"[Log4net Initialize Error] {log}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (logType)
|
||||||
|
{
|
||||||
|
case LogType.Info:
|
||||||
|
{
|
||||||
|
Manager?.Info(log);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LogType.Warn:
|
||||||
|
{
|
||||||
|
Manager?.Warn(log);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LogType.Error:
|
||||||
|
{
|
||||||
|
Manager?.Error(log);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LogType.Debug:
|
||||||
|
{
|
||||||
|
Manager?.Debug(log);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LogType.Fatal:
|
||||||
|
{
|
||||||
|
Manager?.Fatal(log);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LogType.DB:
|
||||||
|
{
|
||||||
|
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
||||||
|
if (t != null)
|
||||||
|
{
|
||||||
|
Manager?.Logger.Log(t, Log4netCustomLevel.DB, log, null);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LogType.HTTP:
|
||||||
|
{
|
||||||
|
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
||||||
|
if (t != null)
|
||||||
|
{
|
||||||
|
Manager?.Logger.Log(t, Log4netCustomLevel.HTTP, log, null);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LogType.SOCKET:
|
||||||
|
{
|
||||||
|
Type? t = MethodBase.GetCurrentMethod()?.DeclaringType;
|
||||||
|
if (t != null)
|
||||||
|
{
|
||||||
|
Manager?.Logger.Log(t, Log4netCustomLevel.SOCKET, log, null);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WriteLine(Exception? ex)
|
||||||
|
{
|
||||||
|
WriteLine(ex?.Message, LogType.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#region Config
|
||||||
|
static string Config = @$"<?xml version=""1.0"" encoding=""utf-8"" ?>
|
||||||
|
<configuration>
|
||||||
|
<log4net>
|
||||||
|
<root>
|
||||||
|
<level value=""ALL""/>
|
||||||
|
<appender-ref ref=""Console""/>
|
||||||
|
<appender-ref ref=""file""/>
|
||||||
|
<appender-ref ref=""fatal_file""/>
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<appender name=""Console"" type=""log4net.Appender.ManagedColoredConsoleAppender"">
|
||||||
|
<layout type=""log4net.Layout.PatternLayout"">
|
||||||
|
<conversionPattern value=""[%date] [%thread] %-6level: %message%newline"" />
|
||||||
|
</layout>
|
||||||
|
<mapping>
|
||||||
|
<level value=""FATAL"" />
|
||||||
|
<foreColor value=""White"" />
|
||||||
|
<backColor value=""Red"" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value=""ERROR"" />
|
||||||
|
<foreColor value=""Red"" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value=""WARN"" />
|
||||||
|
<foreColor value=""Yellow"" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value=""INFO"" />
|
||||||
|
<foreColor value=""Green"" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value=""DEBUG"" />
|
||||||
|
<foreColor value=""Blue"" />
|
||||||
|
</mapping>
|
||||||
|
|
||||||
|
<mapping>
|
||||||
|
<level value=""DB"" />
|
||||||
|
<foreColor value=""DarkMagenta"" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value=""HTTP"" />
|
||||||
|
<foreColor value=""DarkYellow"" />
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<level value=""SOCKET"" />
|
||||||
|
<foreColor value=""DarkCyan"" />
|
||||||
|
</mapping>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name=""file"" type=""log4net.Appender.RollingFileAppender"">
|
||||||
|
<file value=""log/"" />
|
||||||
|
<datepattern value=""yyyy////MM////yyyy-MM-dd'.log'""/>
|
||||||
|
<appendToFile value=""true"" />
|
||||||
|
<rollingStyle value=""Date"" />
|
||||||
|
<staticLogFileName value=""false"" />
|
||||||
|
<layout type=""log4net.Layout.PatternLayout"">
|
||||||
|
<conversionPattern value=""[%date] [%thread] %level %logger - %message%newline"" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name=""fatal_file"" type=""log4net.Appender.RollingFileAppender"">
|
||||||
|
<file value=""log/"" />
|
||||||
|
<datepattern value=""yyyy////MM////yyyy-MM-dd'_fatal.log'""/>
|
||||||
|
<appendToFile value=""true"" />
|
||||||
|
<rollingStyle value=""Date"" />
|
||||||
|
<staticLogFileName value=""false"" />
|
||||||
|
<filter type=""log4net.Filter.LevelRangeFilter"">
|
||||||
|
<param name=""LevelMin"" value=""FATAL"" />
|
||||||
|
<param name=""LevelMax"" value=""FATAL"" />
|
||||||
|
</filter>
|
||||||
|
<layout type=""log4net.Layout.PatternLayout"">
|
||||||
|
<conversionPattern value=""[%date] [%thread] %level %logger - %message%newline"" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
</log4net>
|
||||||
|
</configuration>";
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
log4net 지정 가능 색상
|
||||||
|
Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray,
|
||||||
|
DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White
|
||||||
|
*/
|
||||||
@ -4,6 +4,24 @@
|
|||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
|
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
<WarningLevel>9999</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||||
|
<WarningLevel>9999</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="log4net" Version="3.0.4" />
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
|
<Exec Command="xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dll $(SolutionDir)..\DLL\" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
Reference in New Issue
Block a user