using log4net;
using log4net.Appender;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using TunaWindowsService.Models;
namespace TunaWindowsService.Management
{
class CustomLogManager
{
Timer _DeleteTimer = null;
internal string SetText(Exception pEx)
{
string exMessage = string.Empty;
try
{
if (pEx.TargetSite != null && pEx.TargetSite.DeclaringType != null)
{
exMessage = pEx.Message + "\r\n" +
" Class : " + pEx.TargetSite.DeclaringType.Name + "\r\n" +
" Mehod : " + pEx.TargetSite.Name + "\r\n" +
" " + pEx.StackTrace;
}
else
{
exMessage = pEx.Message;
}
}
catch (Exception ex)
{
Log4NetModel.Log.Error("SetText Method Error : "+ex.Message);
}
return exMessage;
}
internal void RunLogDeleteTimer()
{
try
{
ConfigManager config = new ConfigManager();
double timeOfExecution = double.Parse(config.GetBaseSetting("TimeOfExecution"));
DateTime nowTime = DateTime.Now;
DateTime todayTime = nowTime.Date.AddHours(timeOfExecution);
DateTime nextTime;
if (nowTime <= todayTime)
{
nextTime = todayTime;
}
else
{
nextTime = todayTime.AddDays(1);
}
TimerCallback callback = new TimerCallback(DeleteLog);
_DeleteTimer = new Timer(callback, null, nextTime - DateTime.Now, TimeSpan.FromHours(24));
}
catch (Exception ex)
{
CustomLogManager log = new CustomLogManager();
Log4NetModel.Log.Error(log.SetText(ex));
}
}
private void DeleteLog(object state)
{
ConfigManager config = new ConfigManager();
try
{
string backupPeriod = config.GetBaseSetting("LogBackupPeriod");
var appenders = LogManager.GetRepository().GetAppenders();
RollingFileAppender appender = appenders[0] as RollingFileAppender;
string logFileName = appender.File;
FileInfo logFile = new FileInfo(logFileName);
string serviceLogDirectory = logFile.Directory.ToString();
string libLogDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\WcfLib_Log";
DirectoryInfo serviceDirectoryInfo = new DirectoryInfo(serviceLogDirectory);
DirectoryInfo libDirectoryInfo = new DirectoryInfo(libLogDirectory);
if (!libDirectoryInfo.Exists)
{
libDirectoryInfo.Create();
}
FileInfo[] serviceLogFiles = serviceDirectoryInfo.GetFiles();
FileInfo[] libLogFiles = libDirectoryInfo.GetFiles();
string deleteDate = DateTime.Today.AddDays(-(int.Parse(backupPeriod))).ToString("yyyy-MM-dd");
try
{
foreach (FileInfo file in serviceLogFiles)
{
if (DateTime.Parse(deleteDate) > DateTime.Parse(Path.GetFileNameWithoutExtension(file.Name)))
{
if (Regex.IsMatch(file.Name, ".log"))
{
File.Delete(serviceDirectoryInfo + "\\" + file.Name);
}
}
}
}
catch (Exception ex)
{
CustomLogManager log = new CustomLogManager();
Log4NetModel.Log.Error(log.SetText(ex));
}
try
{
foreach (FileInfo file in libLogFiles)
{
if (DateTime.Parse(deleteDate) > DateTime.Parse(Path.GetFileNameWithoutExtension(file.Name)))
{
if (Regex.IsMatch(file.Name, ".log"))
{
File.Delete(serviceDirectoryInfo + "\\" + file.Name);
}
}
}
}
catch (Exception ex)
{
CustomLogManager log = new CustomLogManager();
Log4NetModel.Log.Error(log.SetText(ex));
}
}
catch (Exception ex)
{
CustomLogManager log = new CustomLogManager();
Log4NetModel.Log.Error(log.SetText(ex));
throw new CustomizeException(ex.Message, ex);
}
}
internal void DisposeLogDeleteTimer()
{
if (_DeleteTimer != null)
{
_DeleteTimer.Dispose();
_DeleteTimer = null;
}
}
}
}
——————————————————————
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TunaWindowsService.Models
{
class CustomizeException : Exception
{
public CustomizeException() { }
public CustomizeException(string message) : base(message) { }
public CustomizeException(string message, Exception inner) : base(message, inner) { }
}
}
____________________________
using log4net;
namespace TunaWindowsService.Models
{
class Log4NetModel
{
static readonly log4net.ILog _RxTxLog = log4net.LogManager.GetLogger("RxTxLog");
static readonly log4net.ILog _Log = log4net.LogManager.GetLogger("ServiceLog");
static public ILog Log
{
get { return _Log; }
}
static public ILog RxTxLog
{
get { return _RxTxLog; }
}
}
}
———————————————————-
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp2
{
internal class Log4NetModel
{
static readonly log4net.ILog _Log = log4net.LogManager.GetLogger("Log_Server");
static public ILog Log
{
get { return _Log; }
}
}
}
————————————————————
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Log\.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="yyyy-MM-dd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date{HH:mm:ss} %-5level]-> %message%newline" />
</layout>
</appender>
<root>
<!--Fatal 시스템 정지에 해당하는 치명적 장해
Error 시스템이 정지하지는 않지만, 문제가 되는 장해
Warn 장해가 아닌 주의경고
Info 동작로그등의 정보
Debug 개발용 디버그 메시지
ALL-->
</root>
<logger name ="Log_Server">
<level value="ALL"/>
<appender-ref ref="RollingActivityLog"/>
</logger>
</log4net>
</configuration>
———————————————————
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
'Dev > C#' 카테고리의 다른 글
C# interop.Excel 데이터 export (1) | 2024.06.09 |
---|---|
평생 해온게 C#인데 뭘 올려야할쥐.............. (0) | 2023.04.27 |