LOG.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. namespace Aitex.Core.RT.Log
  10. {
  11. public static class LOG
  12. {
  13. public enum Level
  14. {
  15. Undefine,
  16. Debug,
  17. Info,
  18. Warning,
  19. Error
  20. }
  21. public static ICommonLog InnerLogger { set; private get; }
  22. public static Action<ModuleName> PMErrorInterrupt;
  23. private static DateTime _lstErrTime;
  24. private static Queue<string> _errMessages = new Queue<string>();
  25. public static void onErrorInterrupt(ModuleName module)
  26. {
  27. if (PMErrorInterrupt != null && ModuleHelper.IsPm(module))
  28. PMErrorInterrupt(module);
  29. }
  30. private static void Debug(string message)
  31. {
  32. if (InnerLogger != null && SC.GetValue<bool>("System.IsOpenDebugLog") ==true)
  33. InnerLogger.Debug(message);
  34. }
  35. public static void Info(string message)
  36. {
  37. if (InnerLogger != null)
  38. InnerLogger.Info(message);
  39. }
  40. public static void Warning(string message)
  41. {
  42. if (InnerLogger != null)
  43. InnerLogger.Warning(message);
  44. }
  45. public static void Error(string message)
  46. {
  47. if (InnerLogger != null)
  48. InnerLogger.Error(message);
  49. }
  50. static string GetFormatStackFrameInfo(Exception ex, int traceLevel = 2)
  51. {
  52. StackFrame sf = new StackTrace(true).GetFrame(traceLevel + 1);
  53. string pathFile = sf.GetFileName();
  54. string file = string.IsNullOrEmpty(pathFile) ? "" : pathFile.Substring(pathFile.LastIndexOf('\\') + 1);
  55. return $"{ex.Message}\r\n{file}\tLine {sf.GetFileLineNumber()}\t{sf.GetMethod().Name}()";
  56. }
  57. public static void Write(eEvent id, string module, params string[] values)
  58. {
  59. Write(id, ModuleHelper.Converter(module), values);
  60. }
  61. public static void WriteExeption(Exception ex)
  62. {
  63. if (!_errMessages.Contains(ex.Message))
  64. {
  65. if (_errMessages.Count > 30)
  66. {
  67. _errMessages.Dequeue();
  68. _errMessages.Enqueue(ex.Message);
  69. }
  70. else
  71. _errMessages.Enqueue(ex.Message);
  72. _lstErrTime = DateTime.Now;
  73. Write(eEvent.ERR_EXCEPTION, ModuleName.System, GetFormatStackFrameInfo(ex));
  74. }
  75. else if (_lstErrTime == null || (DateTime.Now - _lstErrTime).TotalMilliseconds > 10000)
  76. {
  77. _lstErrTime = DateTime.Now;
  78. Write(eEvent.ERR_EXCEPTION, ModuleName.System, GetFormatStackFrameInfo(ex));
  79. }
  80. }
  81. public static void WriteExeption(string prefix, Exception ex)
  82. {
  83. Write(eEvent.ERR_EXCEPTION, ModuleName.System, 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. public static void Write(eEvent id, ModuleName module, params string[] values)
  92. {
  93. //U can Add here to postmsg(MSG.Error) to target entity by the func
  94. //if (id == eEvent.ERR_DEVICE_INFO)
  95. // onErrorInterrupt(module);
  96. var logItem= LogDefineManager.LogItems?.Where(x => x.Id == id).FirstOrDefault();
  97. if (logItem != null)
  98. {
  99. var item1 = logItem.Id;
  100. var item2 = string.Format(logItem.GlobalDescription_zh, values);
  101. var item3 = module.ToString();
  102. StringBuilder text = new StringBuilder();
  103. text.Append(((int)item1).ToString().PadLeft(8));
  104. text.Append(item3.PadLeft(12));
  105. text.Append(" ");
  106. text.Append(string.Format(logItem.GlobalDescription_zh, values));
  107. string message = text.ToString();
  108. //test += (message + "\r\n");
  109. Level level = Level.Undefine;
  110. Enum.TryParse<Level>(logItem.Level, out level);
  111. switch (level)
  112. {
  113. case Level.Debug:
  114. Debug(message);
  115. break;
  116. case Level.Info:
  117. //EV.PostInfoLog(module.ToString(), id, string.Format(((int)item1).ToString().PadRight(6)+ logItem.GlobalDescription_zh, values));
  118. EV.PostInfoLog(module.ToString(), id, string.Format(logItem.GlobalDescription_zh, values));
  119. Info(message);
  120. break;
  121. case Level.Warning:
  122. EV.PostWarningLog(module.ToString(),id, string.Format(logItem.GlobalDescription_zh, values));
  123. Warning(message);
  124. break;
  125. case Level.Error:
  126. EV.PostAlarmLog(module.ToString(),id, string.Format(logItem.GlobalDescription_zh, values));
  127. Error(message);
  128. break;
  129. default:
  130. break;
  131. }
  132. }
  133. }
  134. }
  135. }