LogUtil.cs 7.4 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using System.Reflection;
using System.Drawing;
using System.Globalization;


namespace URSoldering.Common
{
    public class LogUtil
    {
        private static LogUtil instance = new LogUtil();
        public   delegate void ShowLog(string msg, Color color);
        public static readonly ILog LOGGER = LogManager.GetLogger("defaultAppender");

        public static Dictionary<int, DateTime> lastErrorLogTime = new Dictionary<int, DateTime>();

        public static System.Windows.Forms.RichTextBox logBox { get; set; }

        public static int showCount = 3;

        public static bool debug_opened = false;
        public static void ClearLog()
        {
            count = 0;
            if (logBox != null)
            {
                logBox.Clear();
            }
        }
       
        public static void info(ILog log,string msg )
        {
            if (log == null)
            {
                return;
            }

            LOGGER.Info(  msg); 
            if (logBox == null)
            {
                return;
            } 
            AddToBox(msg, Color.Black); 
            //clear();
        }
     
        public static void debug(ILog log, string msg)
        {
            LOGGER.Debug(msg);
            if (debug_opened)
            {
                if (logBox == null)
                {
                    return;
                }
                AddToBox(msg, Color.Gray); 
            }
        }

        private static List<string> lasErrorLogList = new List<string>();
        private static int errCount = 5;
        public static void error(  string errorMsg, int type)
        {
            error(LOGGER, errorMsg, type);
        }
        public static void error(ILog log, string errorMsg,int type)
        {
            if (lastErrorLogTime.ContainsKey(type))
            {
                TimeSpan span = DateTime.Now - lastErrorLogTime[type];
                if (span.TotalSeconds < 5)
                {
                    return;
                }
                else
                {
                    lastErrorLogTime.Remove(type);
                    lastErrorLogTime.Add(type, DateTime.Now);
                    error(log, errorMsg);
                }
            }
            else
            {
                lastErrorLogTime.Add(type, DateTime.Now);
                error(log, errorMsg);
            }
        }
    

        public static void error(ILog log, string errorMsg)
        {
            if (!lasErrorLogList.Contains(errorMsg))
            {
                LOGGER.Error(errorMsg);
                if (logBox == null)
                {
                    return;
                }
                AddToBox(errorMsg, Color.Red);
            }
            lasErrorLogList.Add(errorMsg);
            if (lasErrorLogList.Count > errCount)
            {
                lasErrorLogList.RemoveAt(0);
            }
        }
        private static void AddToBox(string msg, Color color)
        {
            try
            { 
                ShowLogPro(msg, color); 
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:" + ex.StackTrace);
            } 
        }
        private static int count = 0;
        private static void ShowLogPro(string msg, Color color)
        {
            try
            {
                DateTime time = DateTime.Now;
                if (logBox != null)
                {  
                    if (count > showCount)
                    {
                        count = 0;
                        logBox.Clear();
                    } 
                    System.DateTime now = System.DateTime.Now;
                    logBox.AppendText(now.ToLongTimeString() + "  " + msg + Environment.NewLine);
                    count++;
                }
                TimeSpan needTime = DateTime.Now - time;
                if (needTime.TotalSeconds > 3)
                {
                    LOGGER.Error(" 写日志耗费时间:"+needTime.TotalSeconds+"秒");
                }
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:" + ex.ToString());
            }
        }
        public static void error(string errorMsg)
        {
            error( LOGGER,errorMsg);
        }

        public static void info(string msg)
        {
            info(LOGGER,msg );
        }
        public static void debug(string msg)
        {
            debug(LOGGER, msg);
        }
        public static void ClearLogBoxText()
        {
            if (logBox != null)
            {
                logBox.Text = "";
            }
        }
         
        private static readonly ILog solderingLog = LogManager.GetLogger("weldInfoAppender");
        private static string split = ",";
       
        //public static void SoldPoint(string boardName, string pointName, DateTime startPreTime,DateTime endPreTime,DateTime startWeldTime,
        //    DateTime endWeldTime)
        //{
        //    solderingLog.Info(DateTime.Now.ToString() + split + boardName + split + pointName + split + startPreTime.ToString()+split+
        //        endPreTime.ToString()+split+startWeldTime.ToString()+split+endWeldTime.ToString());
        //}
        public static void SoldPoint(string boardName, string pointName, DateTime startPreTime,DateTime endPreTime,DateTime startWeldTime,
            DateTime endWeldTime, int preTemp, double preTime, int weldTemp, double weldTime, double ssendSpeed, double ssendTime, double sendSpeed, double sendTime)
        {
            solderingLog.Info(DateTime.Now.ToString() + split + boardName + split + pointName + split + startPreTime.ToString() + split +
                endPreTime.ToString() + split + startWeldTime.ToString() + split + endWeldTime.ToString()+split+preTemp+split+preTime+split+weldTemp+split
                +weldTime+split+ssendSpeed+split+ssendTime+split+sendSpeed+split+sendTime);
        }
        private static readonly ILog tempLog = LogManager.GetLogger("tempAppender");
        public static void TempLog(string msg)
        {
            if (msg.Equals("--"))
            {
                return;
            }
            tempLog.Info(DateTime.Now.ToString() + split + msg);
        }

        private static readonly ILog boardSoldLog = LogManager.GetLogger("boardSoldAppender");
        public static void BoardSolderingLog(string boardName, DateTime startTime, DateTime endTime)
        {
            boardSoldLog.Info(DateTime.Now.ToString() + split + boardName + split + startTime + split + endTime);
        }


       /// <summary>
       /// 获取写文件的时间
       /// </summary> 
        public static DateTime  GetFileTime(string fileName)
        {
            if (!fileName.Contains(".log"))
            {
                return new DateTime(1970, 1, 1);
            }
            int index = fileName.IndexOf('.');
            if (fileName.Length > index + 3 + 1)
            {
                string data = fileName.Substring(index + 4);
                DateTimeFormatInfo dtFormat = new DateTimeFormatInfo();
                dtFormat.ShortDatePattern = "yyyy-MM-dd";
                DateTime time = Convert.ToDateTime(data, dtFormat);
                return time;
            }
            return new DateTime(1970, 1, 1);
            //DateTime defaultTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            //return defaultTime;
        }


      
    }
}