LOG.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. using Aitex.Core.RT.SCCore;
  2. using System;
  3. using System.Linq;
  4. using System.Diagnostics;
  5. using MECF.Framework.Common.Equipment;
  6. using System.Text;
  7. using Aitex.Core.RT.Event;
  8. using System.Collections.Generic;
  9. using System.Threading;
  10. namespace Aitex.Core.RT.Log
  11. {
  12. public static class LOG
  13. {
  14. public enum Level
  15. {
  16. Undefine,
  17. Debug,
  18. Info,
  19. Warning,
  20. Error
  21. }
  22. public static ICommonLog InnerLogger { set; private get; }
  23. public static Action<ModuleName> PMErrorInterrupt;
  24. private static DateTime _lstErrTime;
  25. private static Queue<string> _errMessages = new Queue<string>();
  26. private static void Debug(string message)
  27. {
  28. if (InnerLogger != null && SC.GetValue<bool>("System.IsOpenDebugLog") ==true)
  29. InnerLogger.Debug(message);
  30. }
  31. private static void Info(string message)
  32. {
  33. if (InnerLogger != null)
  34. InnerLogger.Info(message);
  35. }
  36. private static void Warning(string message)
  37. {
  38. if (InnerLogger != null)
  39. InnerLogger.Warning(message);
  40. }
  41. private static void Error(string message)
  42. {
  43. if (InnerLogger != null)
  44. InnerLogger.Error(message);
  45. }
  46. static string GetFormatStackFrameInfo(Exception ex, int traceLevel = 2)
  47. {
  48. StackFrame sf = new StackTrace(true).GetFrame(traceLevel + 1);
  49. string pathFile = sf.GetFileName();
  50. string file = string.IsNullOrEmpty(pathFile) ? "" : pathFile.Substring(pathFile.LastIndexOf('\\') + 1);
  51. return $"{ex.Message}\r\n{file}\tLine {sf.GetFileLineNumber()}\t{sf.GetMethod().Name}()";
  52. }
  53. public static void Write(eEvent id, string module, params string[] values)
  54. {
  55. Write(id, ModuleHelper.Converter(module), values);
  56. }
  57. public static void WriteExeption(Exception ex)
  58. {
  59. if (!_errMessages.Contains(ex.Message))
  60. {
  61. if (_errMessages.Count > 30)
  62. {
  63. _errMessages.Dequeue();
  64. _errMessages.Enqueue(ex.Message);
  65. }
  66. else
  67. _errMessages.Enqueue(ex.Message);
  68. _lstErrTime = DateTime.Now;
  69. Write(eEvent.ERR_EXCEPTION, ModuleName.System, GetFormatStackFrameInfo(ex));
  70. }
  71. else if (_lstErrTime == null || (DateTime.Now - _lstErrTime).TotalMilliseconds > 10000)
  72. {
  73. _lstErrTime = DateTime.Now;
  74. Write(eEvent.ERR_EXCEPTION, ModuleName.System, GetFormatStackFrameInfo(ex));
  75. }
  76. }
  77. public static void WriteExeption(string prefix, Exception ex)
  78. {
  79. Write(eEvent.ERR_EXCEPTION, ModuleName.System, prefix + GetFormatStackFrameInfo(ex));
  80. }
  81. public static void WriteDBExeption(string prefix, Exception ex)
  82. {
  83. WriteDBExceptionLog(eEvent.ERR_EXCEPTION, ModuleName.System.ToString(), prefix + GetFormatStackFrameInfo(ex));
  84. }
  85. public static void WriteSingeLine(eEvent id, ModuleName module, string log)
  86. {
  87. string newLog = log.Replace("\r", "<回车>");
  88. newLog = newLog.Replace("\n", "<换行>");
  89. Write(id, module, newLog);
  90. }
  91. private static void WriteDBExceptionLog(eEvent id, string module, params string[] values)
  92. {
  93. var logItem = LogDefineManager.LogItems?.Where(x => x.Id == id).FirstOrDefault();
  94. if (logItem != null)
  95. {
  96. var item1 = logItem.Id;
  97. var item2 = string.Format(logItem.GlobalDescription_zh, values);
  98. var item3 = module;
  99. StringBuilder text = new StringBuilder();
  100. text.Append(((int)item1).ToString().PadLeft(8));
  101. text.Append(" ");
  102. text.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
  103. text.Append(" ");
  104. text.Append(item3.PadLeft(12));
  105. text.Append(" ");
  106. text.Append(Thread.CurrentThread.ManagedThreadId);
  107. text.Append(" ");
  108. text.Append(string.Format(logItem.GlobalDescription_zh, values));
  109. string message = text.ToString();
  110. //test += (message + "\r\n");
  111. Level level = Level.Undefine;
  112. Enum.TryParse<Level>(logItem.Level, out level);
  113. switch (level)
  114. {
  115. case Level.Debug:
  116. Debug(message);
  117. break;
  118. case Level.Info:
  119. Info(message);
  120. break;
  121. case Level.Warning:
  122. Warning(message);
  123. break;
  124. case Level.Error:
  125. Error(message);
  126. break;
  127. default:
  128. break;
  129. }
  130. }
  131. }
  132. public static void WriteLog(eEvent id,string module,params string[] values)
  133. {
  134. var logItem = LogDefineManager.LogItems?.Where(x => x.Id == id).FirstOrDefault();
  135. if (logItem != null)
  136. {
  137. var item1 = logItem.Id;
  138. var item2 = string.Format(logItem.GlobalDescription_zh, values);
  139. var item3 = module;
  140. StringBuilder text = new StringBuilder();
  141. text.Append(((int)item1).ToString().PadLeft(8));
  142. text.Append(" ");
  143. text.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
  144. text.Append(" ");
  145. text.Append(item3.PadLeft(12));
  146. text.Append(" ");
  147. text.Append(Thread.CurrentThread.ManagedThreadId);
  148. text.Append(" ");
  149. text.Append(string.Format(logItem.GlobalDescription_zh, values));
  150. string message = text.ToString();
  151. //test += (message + "\r\n");
  152. Level level = Level.Undefine;
  153. Enum.TryParse<Level>(logItem.Level, out level);
  154. switch (level)
  155. {
  156. case Level.Debug:
  157. Debug(message);
  158. break;
  159. case Level.Info:
  160. //EV.PostInfoLog(module.ToString(), id, string.Format(((int)item1).ToString().PadRight(6)+ logItem.GlobalDescription_zh, values));
  161. EV.PostInfoLog(module, id, string.Format(logItem.GlobalDescription_zh, values));
  162. Info(message);
  163. break;
  164. case Level.Warning:
  165. EV.PostWarningLog(module, id, string.Format(logItem.GlobalDescription_zh, values));
  166. Warning(message);
  167. break;
  168. case Level.Error:
  169. EV.PostAlarmLog(module, id, string.Format(logItem.GlobalDescription_zh, values));
  170. Error(message);
  171. break;
  172. default:
  173. break;
  174. }
  175. }
  176. }
  177. public static void Write(eEvent id, ModuleName module, params string[] values)
  178. {
  179. WriteLog(id, module.ToString(), values);
  180. }
  181. public static void WriteBackgroundLog(eEvent id, string module, params string[] values)
  182. {
  183. var logItem = LogDefineManager.LogItems?.Where(x => x.Id == id).FirstOrDefault();
  184. if (logItem != null)
  185. {
  186. var item1 = logItem.Id;
  187. var item2 = string.Format(logItem.GlobalDescription_zh, values);
  188. var item3 = module;
  189. StringBuilder text = new StringBuilder();
  190. text.Append(((int)item1).ToString().PadLeft(8));
  191. text.Append(" ");
  192. text.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
  193. text.Append(" ");
  194. text.Append(item3.PadLeft(12));
  195. text.Append(" ");
  196. text.Append(Thread.CurrentThread.ManagedThreadId);
  197. text.Append(" ");
  198. text.Append(string.Format(logItem.GlobalDescription_zh, values));
  199. string message = text.ToString();
  200. //test += (message + "\r\n");
  201. Level level = Level.Undefine;
  202. Enum.TryParse<Level>(logItem.Level, out level);
  203. switch (level)
  204. {
  205. case Level.Debug:
  206. Debug(message);
  207. break;
  208. case Level.Info:
  209. Info(message);
  210. break;
  211. case Level.Warning:
  212. Warning(message);
  213. break;
  214. case Level.Error:
  215. Error(message);
  216. break;
  217. default:
  218. break;
  219. }
  220. }
  221. }
  222. }
  223. }