Browse Source

添加日志记录

章政 7 years ago
parent
commit
9a816c5d0d

+ 62 - 0
PLCDataReader/ClassFile/LogManager.cs

@@ -0,0 +1,62 @@
+using System;
+using System.IO;
+
+namespace ClassFile
+{
+    class LogManager
+    {
+        public static string LogAddress = @"C:\LogInfo\";
+        /// <summary>
+        /// 记录操作
+        /// </summary>
+        /// <param name="Message"></param>
+        public static void DoLog(string Message)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【消息】" + Message + "\n");
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+
+        /// <summary>
+        /// 记录操作和SQL
+        /// </summary>
+        /// <param name="Message"></param>
+        /// <param name="SQL"></param>
+        public static void DoLog(string Message, string SQL)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【消息】" + Message + "\n");
+                sw.WriteLine("【SQL】" + SQL + "\n");
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+
+        /// <summary>
+        /// 记录SQL
+        /// </summary>
+        /// <param name="SQL"></param>
+        public static void DoSQLLog(string SQL)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【SQL】" + SQL + "\n");
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+    }
+}

+ 1 - 0
PLCDataReader/ClassFile/ModeBusTCPServer.cs

@@ -112,6 +112,7 @@ namespace ClassFile
                 }
                 }
                 string str = Encoding.ASCII.GetString(datashow);
                 string str = Encoding.ASCII.GetString(datashow);
                 richtext.AppendText(str + "\n");
                 richtext.AppendText(str + "\n");
+                LogManager.DoLog(str);
             }
             }
         }
         }
 
 

+ 81 - 7
PLCDataReader/Program.cs

@@ -1,21 +1,95 @@
 using System;
 using System;
-using System.Collections.Generic;
-using System.Linq;
+using System.IO;
+using System.Security.Principal;
+using System.Text;
 using System.Windows.Forms;
 using System.Windows.Forms;
+using System.Xml;
+using ClassFile;
 
 
 namespace UAS_PLCDataReader
 namespace UAS_PLCDataReader
 {
 {
     static class Program
     static class Program
     {
     {
         /// <summary>
         /// <summary>
-        /// 应用程序的主入口点
+        /// 应用程序的主入口点
         /// </summary>
         /// </summary>
         [STAThread]
         [STAThread]
         static void Main()
         static void Main()
         {
         {
-            Application.EnableVisualStyles();
-            Application.SetCompatibleTextRenderingDefault(false);
-            Application.Run(new MainWindow());
+            try
+            {
+                WindowsIdentity identity = WindowsIdentity.GetCurrent();
+                WindowsPrincipal principal = new WindowsPrincipal(identity);
+                //设置应用程序处理异常方式:ThreadException处理
+                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
+                //处理UI线程异常
+                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
+                //处理非UI线程异常
+                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
+                #region 应用程序的主入口点
+                Application.EnableVisualStyles();
+                Application.SetCompatibleTextRenderingDefault(false);
+                //启用异常记录日志的操作
+                string sysdisc = Environment.GetEnvironmentVariable("windir").Substring(0, 1);
+                //创建标签缓存的文件夹
+                if (!Directory.Exists(LogManager.LogAddress))
+                    Directory.CreateDirectory(LogManager.LogAddress);
+                FileStream fs = new FileStream(LogManager.LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
+                fs.Close();
+                if (principal.IsInRole(WindowsBuiltInRole.Administrator))
+                    Application.Run(new MainWindow());
+                else
+                {
+                    //创建启动对象
+                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
+                    // 设置运行文件
+                    startInfo.FileName = Application.ExecutablePath;
+                    //设置启动动作,确保以管理员身份运行
+                    startInfo.Verb = "runas";
+                    //如果不是管理员,则启动UAC
+                    System.Diagnostics.Process.Start(startInfo);
+                }
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                string str = GetExceptionMsg(ex, string.Empty);
+                MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        //处理线程的异常
+        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
+        {
+            string str = GetExceptionMsg(e.Exception, e.ToString());
+            LogManager.DoLog(e.Exception.Message + "  " + e.Exception.TargetSite + "  " + e.Exception.StackTrace);
+            MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
+        }
+
+        //未处理的异常统一通过这里返回
+        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+        {
+            string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
+            LogManager.DoLog(str);
+            MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
+        }
+
+        /// <summary>
+        /// 生成自定义异常消息
+        /// </summary>
+        /// <param name="ex">异常对象</param>
+        /// <param name="backStr">备用异常消息:当ex为null时有效</param>
+        /// <returns>异常字符串文本</returns>
+        static string GetExceptionMsg(Exception ex, string backStr)
+        {
+            StringBuilder sb = new StringBuilder();
+            if (ex != null)
+            {
+                sb.AppendLine(ex.Message);
+                //sb.AppendLine("【异常方法】:" + ex.StackTrace);
+            }
+            //else { sb.AppendLine("【未处理异常】:" + backStr); }
+            return sb.ToString();
         }
         }
     }
     }
-}
+}

+ 1 - 0
PLCDataReader/UAS_PLCDataReader.csproj

@@ -60,6 +60,7 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Compile Include="ClassFile\DataHelper.cs" />
     <Compile Include="ClassFile\DataHelper.cs" />
+    <Compile Include="ClassFile\LogManager.cs" />
     <Compile Include="MainWindow.cs">
     <Compile Include="MainWindow.cs">
       <SubType>Form</SubType>
       <SubType>Form</SubType>
     </Compile>
     </Compile>