using System;
using System.IO;
using System.Timers;
namespace Aitex.Core.RT.Log
{
    public class LogManager : ICommonLog
    {
        public const int MaxLogsMonth = 3;
        public static  readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("fileAppender");       
        private static Timer deleteTimer;//定义定时器,定时删除log
        public void Initialize()
        {
            deleteTimer = new Timer(1);
            deleteTimer.Elapsed += OnDeleteLog;
            deleteTimer.AutoReset = true;
            deleteTimer.Enabled = true;
            LOG.InnerLogger = this;
            
        }
        public void Debug(string message)
        { 
            loginfo.Debug(message);
        }
        public  void Info(string message)
        {
            loginfo.Info(message);
        }
        public void Warning(string message)
        {
            loginfo.Warn(message);
        }
      
        public void Error(string message)
        {
            loginfo.Error(message);
        }
        /// 
        /// 定期删除log
        /// 
        /// 
        void OnDeleteLog(Object source, ElapsedEventArgs e)
        {
            try
            {
                if (deleteTimer.Interval == 1)
                {
                    deleteTimer.Interval = 1000 * 60 * 60 * 24;
                }
                string path = string.Format(@"{0}", "Logs");
                FileInfo[] fileInfos;
                DirectoryInfo curFolderInfo = new DirectoryInfo(path);
                fileInfos = curFolderInfo.GetFiles();
                foreach (FileInfo info in fileInfos)
                {
                    if (info.Name.Contains("log") && info.Extension == ".txt")
                    {
                        DateTime lastWriteTime = DateTime.Parse(info.LastWriteTime.ToShortDateString());
                        DateTime intervalTime = DateTime.Now.AddMonths(-MaxLogsMonth);
                        if (lastWriteTime < intervalTime)
                        {
                            File.Delete(info.FullName);
                        }
                    }
                }
               
            }
            catch 
            {
               
            }
        }
        public void Terminate()
        {
            try
            {
                if (deleteTimer != null)
                {
                    deleteTimer.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
            }
        }
    }
}