| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 | using Aitex.Core.RT.SCCore;using System;using System.Linq;using System.Diagnostics;using MECF.Framework.Common.Equipment;using System.Text;using Aitex.Core.RT.Event;using System.Collections.Generic;using System.Threading;namespace Aitex.Core.RT.Log{    public static class LOG    {        public enum Level        {            Undefine,            Debug,            Info,            Warning,            Error                 }        public static ICommonLog InnerLogger { set;  private get; }        public static Action<ModuleName> PMErrorInterrupt;        private static DateTime _lstErrTime;        private static Queue<string> _errMessages = new Queue<string>();        private static void Debug(string message)        {            if (InnerLogger != null && SC.GetValue<bool>("System.IsOpenDebugLog") ==true)                                InnerLogger.Debug(message);        }        private static void Info(string message)        {            if (InnerLogger != null)                InnerLogger.Info(message);        }        private static void Warning(string message)        {            if (InnerLogger != null)                InnerLogger.Warning(message);        }        private static void Error(string message)        {            if (InnerLogger != null)                InnerLogger.Error(message);        }        static string GetFormatStackFrameInfo(Exception ex, int traceLevel = 2)        {            StackFrame sf = new StackTrace(true).GetFrame(traceLevel + 1);            string pathFile = sf.GetFileName();            string file = string.IsNullOrEmpty(pathFile) ? "" : pathFile.Substring(pathFile.LastIndexOf('\\') + 1);            return $"{ex.Message}\r\n{file}\tLine {sf.GetFileLineNumber()}\t{sf.GetMethod().Name}()";        }        public static void Write(eEvent id, string module, params string[] values)        {            Write(id, ModuleHelper.Converter(module), values);        }        public static void WriteExeption(Exception ex)        {            if (!_errMessages.Contains(ex.Message))            {                if (_errMessages.Count > 30)                {                    _errMessages.Dequeue();                    _errMessages.Enqueue(ex.Message);                }                else                    _errMessages.Enqueue(ex.Message);                _lstErrTime = DateTime.Now;                Write(eEvent.ERR_EXCEPTION, ModuleName.System, GetFormatStackFrameInfo(ex));            }            else if (_lstErrTime == null || (DateTime.Now - _lstErrTime).TotalMilliseconds > 10000)            {                _lstErrTime = DateTime.Now;                Write(eEvent.ERR_EXCEPTION, ModuleName.System, GetFormatStackFrameInfo(ex));            }        }        public static void WriteExeption(string prefix, Exception ex)        {            Write(eEvent.ERR_EXCEPTION, ModuleName.System, prefix + GetFormatStackFrameInfo(ex));        }        public static void WriteDBExeption(string prefix, Exception ex)        {            WriteDBExceptionLog(eEvent.ERR_EXCEPTION, ModuleName.System.ToString(), prefix + GetFormatStackFrameInfo(ex));        }        public static void WriteSingeLine(eEvent id, ModuleName module, string log)        {            string newLog = log.Replace("\r", "<回车>");            newLog = newLog.Replace("\n", "<换行>");            Write(id, module, newLog);        }        private static void WriteDBExceptionLog(eEvent id, string module, params string[] values)        {            var logItem = LogDefineManager.LogItems?.Where(x => x.Id == id).FirstOrDefault();            if (logItem != null)            {                var item1 = logItem.Id;                var item2 = string.Format(logItem.GlobalDescription_en, values);                var item3 = module;                StringBuilder text = new StringBuilder();                text.Append(((int)item1).ToString().PadLeft(8));                text.Append("   ");                text.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));                text.Append("   ");                text.Append(item3.PadLeft(12));                text.Append("   ");                text.Append(Thread.CurrentThread.ManagedThreadId);                text.Append("    ");                text.Append(string.Format(logItem.GlobalDescription_en, values));                string message = text.ToString();                //test += (message + "\r\n");                Level level = Level.Undefine;                Enum.TryParse<Level>(logItem.Level, out level);                switch (level)                {                    case Level.Debug:                        Debug(message);                        break;                    case Level.Info:                        Info(message);                        break;                    case Level.Warning:                        Warning(message);                        break;                    case Level.Error:                        Error(message);                        break;                    default:                        break;                }            }        }        public static void WriteLog(eEvent id,string module,params string[] values)        {            var logItem = LogDefineManager.LogItems?.Where(x => x.Id == id).FirstOrDefault();            if (logItem != null)            {                var item1 = logItem.Id;                var item2 = string.Format(logItem.GlobalDescription_en, values);                var item3 = module;                StringBuilder text = new StringBuilder();                text.Append(((int)item1).ToString().PadLeft(8));                text.Append("   ");                text.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));                text.Append("   ");                text.Append(item3.PadLeft(12));                text.Append("   ");                text.Append(Thread.CurrentThread.ManagedThreadId);                text.Append("    ");                text.Append(string.Format(logItem.GlobalDescription_en, values));                string message = text.ToString();                //test += (message + "\r\n");                Level level = Level.Undefine;                Enum.TryParse<Level>(logItem.Level, out level);                switch (level)                {                    case Level.Debug:                        Debug(message);                        break;                    case Level.Info:                        //EV.PostInfoLog(module.ToString(), id, string.Format(((int)item1).ToString().PadRight(6)+ logItem.GlobalDescription_en, values));                        EV.PostInfoLog(module, id, string.Format(logItem.GlobalDescription_en, values));                        Info(message);                        break;                    case Level.Warning:                        EV.PostWarningLog(module, id, string.Format(logItem.GlobalDescription_en, values));                        Warning(message);                        break;                    case Level.Error:                        EV.PostAlarmLog(module, id, string.Format(logItem.GlobalDescription_en, values));                        Error(message);                        break;                    default:                        break;                }            }        }        public static void Write(eEvent id, ModuleName module, params string[] values)        {            WriteLog(id, module.ToString(), values);        }                   public static void WriteBackgroundLog(eEvent id, string module, params string[] values)        {            var logItem = LogDefineManager.LogItems?.Where(x => x.Id == id).FirstOrDefault();            if (logItem != null)            {                var item1 = logItem.Id;                var item2 = string.Format(logItem.GlobalDescription_en, values);                var item3 = module;                StringBuilder text = new StringBuilder();                text.Append(((int)item1).ToString().PadLeft(8));                text.Append("   ");                text.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));                text.Append("   ");                text.Append(item3.PadLeft(12));                text.Append("   ");                text.Append(Thread.CurrentThread.ManagedThreadId);                text.Append("    ");                text.Append(string.Format(logItem.GlobalDescription_en, values));                string message = text.ToString();                //test += (message + "\r\n");                Level level = Level.Undefine;                Enum.TryParse<Level>(logItem.Level, out level);                switch (level)                {                    case Level.Debug:                        Debug(message);                        break;                    case Level.Info:                        Info(message);                        break;                    case Level.Warning:                        Warning(message);                        break;                    case Level.Error:                        Error(message);                        break;                    default:                        break;                }            }        }    }}
 |