OTSMeasureOutputNlog.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6. using System.Windows.Forms;
  7. using NLog;
  8. using NLog.Config;
  9. using OTS.WinFormsUI.Docking;
  10. using OTSModelSharp;
  11. namespace OTSMeasureApp
  12. {
  13. public struct PostLogMsg
  14. {
  15. public int logLevel;//1 trace 2 debug 3info 4 warn 5 error 6 fatal
  16. [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)100)]
  17. public char[] logMessage;
  18. };
  19. public partial class OTSMeasureOutputNlog : DockContent
  20. {
  21. //OTSSysMgrTools.Language lan;
  22. //Hashtable table;
  23. protected static NLog.Logger loger;
  24. private PostLogMsg m_LogMsg;
  25. public const int MsgID = 0x0464;
  26. public const int LogMsgID = 0x0465;
  27. //public List<STMrsSampleRetThreadMsg> m_MSTMsg = new List<STMrsSampleRetThreadMsg>();
  28. //private STMrsSampleRetThreadMsg MSTMsg;
  29. public OTSMeasureOutputNlog()
  30. {
  31. InitializeComponent();
  32. }
  33. private void OTSMeasureOutputNlog_Load(object sender, EventArgs e)
  34. {
  35. combox_NlogType.Items.Add("Trace");
  36. combox_NlogType.Items.Add("Debug");
  37. combox_NlogType.Items.Add("Info");
  38. combox_NlogType.Items.Add("Warn");
  39. combox_NlogType.Items.Add("Error");
  40. combox_NlogType.Items.Add("Fatal");
  41. combox_NlogType.SelectedIndex = 0;
  42. loger = NLog.LogManager.GetCurrentClassLogger();
  43. //国际
  44. //string aa=this.Name;
  45. //lan = new OTSSysMgrTools.Language(this);
  46. //table = lan.GetNameTable(this.Name);
  47. //button_Clear.Text = table["button_clear"].ToString();
  48. }
  49. private void button_Test_Click(object sender, EventArgs e)
  50. {
  51. loger.Trace("Trace");
  52. loger.Debug("Debug");
  53. loger.Info("Info");
  54. loger.Warn("Warn");
  55. loger.Error("Error");
  56. loger.Fatal("Fatal THIS IS A LOG WHICH USED TO TEST THE LOG LENTH FIT TO THE FORM!");
  57. }
  58. private void button_Clear_Click(object sender, EventArgs e)
  59. {
  60. richTextBox_Nlog.Clear();
  61. }
  62. private void combox_NlogType_SelectedIndexChanged(object sender, EventArgs e)
  63. {
  64. if (null == combox_NlogType.SelectedItem) return;
  65. String str = combox_NlogType.SelectedItem.ToString(); // 获取日志级别.
  66. LogLevel lv = LogLevel.Info; // 若选择的值无效, 则当作 Info级.
  67. lv = LogLevel.FromString(str);
  68. LoggingRule lr = LogManager.Configuration.LoggingRules.FirstOrDefault(
  69. r => r.Targets.Any(
  70. t => "control" == t.Name
  71. )
  72. );
  73. if (lr != null)
  74. {
  75. lr.SetLoggingLevels(lv, LogLevel.Fatal);
  76. LogManager.ReconfigExistingLoggers(); // 使配置生效.
  77. }
  78. }
  79. private void button_stop_Click(object sender, EventArgs e)
  80. {
  81. if (button_stop.Text == "Stop")
  82. {
  83. LoggingRule lr = LogManager.Configuration.LoggingRules.FirstOrDefault(
  84. r => r.Targets.Any(
  85. t => "control" == t.Name
  86. )
  87. );
  88. LogManager.Configuration.LoggingRules.Remove(lr);
  89. LogManager.ReconfigExistingLoggers();
  90. button_stop.Text = "Start";
  91. }
  92. else
  93. {
  94. if (null == combox_NlogType.SelectedItem) return;
  95. String str = combox_NlogType.SelectedItem.ToString();
  96. LogManager.Configuration.AddRule(LogLevel.FromString(str), LogLevel.Fatal, "control");
  97. LogManager.ReconfigExistingLoggers(); // 使配置生效.
  98. button_stop.Text = "Stop";
  99. }
  100. }
  101. protected override void DefWndProc(ref Message m)
  102. {
  103. switch (m.Msg)
  104. {
  105. case MsgID:
  106. //MSTMsg = new STMrsSampleRetThreadMsg();
  107. //MSTMsg.STMThreadStu.cMsrStartTime = new char[(int)MEMORY_SIZE.TIME_SIZE];
  108. //MSTMsg.STMThreadStu.cMsrEndTime = new char[(int)MEMORY_SIZE.TIME_SIZE];
  109. //MSTMsg.STMSampleRetData.BSEData.FieldPos = new Point();
  110. //MSTMsg.STMSampleRetData.SFieldata.FieldPos = new Point();
  111. //MSTMsg.STMSampleRetData.StartMsrField.FieldPos = new Point();
  112. //MSTMsg.STMSampleStu.cMsrSName = new char[(int)MEMORY_SIZE.SAMPLE_NAME_SIZE];
  113. //MSTMsg = (STMrsSampleRetThreadMsg)Marshal.PtrToStructure(m.LParam, typeof(STMrsSampleRetThreadMsg));
  114. ////以下为实时接收图片数据,因为图片传出来的只是指针,所以必须立即接收,否则指针指向的数据就会被析构。
  115. //Byte[] bBSEData;
  116. //int iHeight, iWidth;
  117. //iHeight = MSTMsg.STMSampleRetData.BSEData.iBSEDataHeight;
  118. //iWidth = MSTMsg.STMSampleRetData.BSEData.iBSEDataWidth;
  119. //if (iHeight > 0 && iWidth > 0)
  120. //{
  121. // bBSEData = new Byte[iHeight * iWidth];
  122. // Marshal.Copy(MSTMsg.STMSampleRetData.BSEData.pData, bBSEData, 0, iHeight * iWidth);
  123. // MSTMsg.gbseData = bBSEData;
  124. //}
  125. ////申请
  126. //shareRes.mutex.WaitOne();
  127. //m_MSTMsg.Add(MSTMsg);
  128. // 释放
  129. //shareRes.mutex.ReleaseMutex();
  130. break;
  131. case LogMsgID:
  132. m_LogMsg = new PostLogMsg();
  133. m_LogMsg = (PostLogMsg)Marshal.PtrToStructure(m.LParam, typeof(PostLogMsg));
  134. var log = NLog.LogManager.GetCurrentClassLogger();
  135. string s = GetString(m_LogMsg.logMessage);
  136. switch (m_LogMsg.logLevel)
  137. {
  138. case 1:
  139. log.Trace(s);
  140. break;
  141. case 2:
  142. log.Debug(s);
  143. break;
  144. case 3:
  145. log.Info(s);
  146. break;
  147. case 4:
  148. log.Warn(s);
  149. break;
  150. case 5:
  151. log.Error(s);
  152. break;
  153. case 6:
  154. log.Fatal(s);
  155. break;
  156. }
  157. break;
  158. default:
  159. base.DefWndProc(ref m);
  160. break;
  161. }
  162. }
  163. private string GetString(char[] csStr)
  164. {
  165. int ilen = csStr.Length;
  166. string csName = new string(csStr); //MSTMsg.STMSampleStu.cSName
  167. csName.IndexOf('\0');
  168. csName = csName.Substring(0, csName.IndexOf('\0'));
  169. return csName;
  170. }
  171. }
  172. }