コード例 #1
0
ファイル: Xml_codec.cs プロジェクト: jiangboh/CS
        /// <summary>
        /// 日志打印。
        /// </summary>
        /// <param name="str"></param>
        public static void StaticOutputLog(LogInfoType type, string str, string modeName,
                                           LogCategory category = LogCategory.I,
                                           [CallerMemberName] string memberName = "",
                                           [CallerFilePath] string filePath     = "",
                                           [CallerLineNumber] int lineNumber    = 0)
        {
            if (type < DataController.LogOutputLevel)
            {
                return;
            }

            string outStr = string.Format("{0}", str);

            //Console.WriteLine(outStr);

            FrmMainController.add_log_info(type, outStr, modeName, category, filePath, memberName, lineNumber);
            Logger.Trace(type, outStr, modeName, category, memberName, filePath, lineNumber);

            outStr = null;
        }
コード例 #2
0
ファイル: Logger.cs プロジェクト: jiangboh/CS
        /// <summary>
        /// 用于处理Logger的线程
        /// </summary>
        /// <param name="obj"></param>
        private static void thread_for_logger(object obj)
        {
            bool          noMsg   = false;
            string        info    = "";
            List <string> lstData = new List <string>();

            DateTime startTime = System.DateTime.Now;
            DateTime endTime   = System.DateTime.Now;
            TimeSpan ts        = endTime.Subtract(startTime);

            List <string> batchData = new List <string>();

            DateTime startTimeConn = System.DateTime.Now;
            DateTime endTimeConn   = System.DateTime.Now;
            TimeSpan tsConn        = endTimeConn.Subtract(startTimeConn);

            DateTime startTimeMonitor = System.DateTime.Now;
            DateTime endTimeMonitor   = System.DateTime.Now;
            TimeSpan tsMonitor        = endTimeMonitor.Subtract(startTimeMonitor);


            while (true)
            {
                if (noMsg)
                {
                    //没消息时Sleep一大点
                    Thread.Sleep(100);
                }
                else
                {
                    //有消息时Sleep一小点
                    Thread.Sleep(2);
                }

                try
                {
                    #region 报告线程状态

                    endTimeMonitor = System.DateTime.Now;
                    tsMonitor      = endTimeMonitor.Subtract(startTimeMonitor);

                    if (tsMonitor.TotalSeconds >= 60)
                    {
                        FrmMainController.write_monitor_status("Logger_Status");

                        //计时复位
                        startTimeMonitor = System.DateTime.Now;
                    }

                    #endregion
                }
                catch (Exception ee)
                {
                    Logger.Trace(LogInfoType.EROR, ee.Message, "Logger", LogCategory.I);
                    continue;
                }

                try
                {
                    #region keepAlive处理

                    if (logOutType == LogOutType.OT_Net || logOutType == LogOutType.OT_Both)
                    {
                        endTimeConn = System.DateTime.Now;
                        tsConn      = endTimeConn.Subtract(startTimeConn);

                        if (tsConn.TotalSeconds >= DataController.CheckFtpConnStatTime)
                        {
                            string str       = string.Format("[{0}]--keepAlive-UDP", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));
                            byte[] sendBytes = System.Text.Encoding.Default.GetBytes(str);

                            udpSender.Connect(DataController.StrLogIpAddr, int.Parse(DataController.StrLogPort));

                            //udpSender.Send(sendBytes, sendBytes.Length);

                            Trace(LogInfoType.INFO, str, "Logger", LogCategory.S);
                            FrmMainController.add_log_info(LogInfoType.INFO, str, "Logger", LogCategory.S);

                            //计时复位
                            startTimeConn = System.DateTime.Now;
                        }
                    }

                    #endregion
                }
                catch (Exception ee)
                {
                    Logger.Trace(LogInfoType.EROR, ee.Message, "Logger", LogCategory.I);
                    continue;
                }

                try
                {
                    #region 保存Logger

                    lock (mutex_Logger)
                    {
                        // 动态计算批量更新的数量
                        BatchValue = (4 - (int)DataController.LogOutputLevel) * 10;
                        if (gQueueLogger.Count < BatchValue)
                        {
                            #region 数量不足

                            endTime = System.DateTime.Now;
                            ts      = endTime.Subtract(startTime);

                            if (ts.TotalSeconds < DataController.LogMaxIdleSeconds)
                            {
                                noMsg = true;
                                continue;
                            }
                            else
                            {
                                //清空数据
                                //lstData = new List<string>();
                                lstData.Clear();
                                lstData.TrimExcess();

                                //拷贝数据
                                while (gQueueLogger.Count > 0)
                                {
                                    lstData.Add(gQueueLogger.Dequeue());
                                }

                                //复位计时
                                startTime = System.DateTime.Now;
                            }

                            #endregion
                        }
                        else
                        {
                            #region 数量充足

                            //清空数据
                            //lstData = new List<string>();
                            lstData.Clear();
                            lstData.TrimExcess();

                            //拷贝数据
                            for (int i = 0; i < BatchValue; i++)
                            {
                                lstData.Add(gQueueLogger.Dequeue());
                            }

                            //复位起始时间
                            startTime = System.DateTime.Now;

                            #endregion
                        }
                    }

                    noMsg = false;
                    switch (logOutType)
                    {
                    case LogOutType.OT_File:
                    {
                        //检测日志日期
                        StrategyLog();

                        info = null;
                        foreach (string str in lstData)
                        {
                            info += str + "\r\n";
                        }

                        System.Diagnostics.Trace.WriteLine(info);
                        if (fileFlushType == FileFlushType.RightNow)
                        {
                            System.Diagnostics.Trace.Close();
                        }

                        info = null;
                        break;
                    }

                    case LogOutType.OT_Net:
                    {
                        foreach (string str in lstData)
                        {
                            byte[] sendBytes = Encoding.Default.GetBytes(str);
                            udpSender.Send(sendBytes, sendBytes.Length);
                        }

                        break;
                    }

                    case LogOutType.OT_Both:
                    {
                        //检测日志日期
                        StrategyLog();

                        info = null;
                        foreach (string str in lstData)
                        {
                            info += str + "\r\n";
                        }

                        System.Diagnostics.Trace.WriteLine(info);
                        if (fileFlushType == FileFlushType.RightNow)
                        {
                            System.Diagnostics.Trace.Close();
                        }

                        foreach (string str in lstData)
                        {
                            byte[] sendBytes = Encoding.Default.GetBytes(str);
                            udpSender.Send(sendBytes, sendBytes.Length);
                        }

                        info = null;
                        break;
                    }
                    }

                    #endregion
                }
                catch (Exception ee)
                {
                    Logger.Trace(LogInfoType.EROR, ee.Message, "Logger", LogCategory.I);
                    continue;
                }
            }
        }