Dev/C#

tempppp

giftDev 2024. 6. 28. 08:58
반응형


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