Example #1
0
        private DateTime lastFocusTime; //增加刷新间隔,降低延迟
        private void AppendText(int index, string text, LogShowMode mode)
        {
            if (this.listView1.InvokeRequired)//如果调用控件的线程和创建创建控件的线程不是同一个则为True
            {
                AppendTextCallback d = new AppendTextCallback(AppendText);
                this.listView1.Invoke(d, new object[] { index, text, mode });
            }
            else
            {
                ListViewItem lvi = new ListViewItem();
                lvi.Text = text;
                lvi.Tag  = index;
                switch (mode)
                {
                case LogShowMode.DEBUG: lvi.ForeColor = ConfigObject.Instance.DebugForeColor; lvi.BackColor = ConfigObject.Instance.DebugBackColor; break;

                case LogShowMode.NOTIC: lvi.ForeColor = ConfigObject.Instance.NoticForeColor; lvi.BackColor = ConfigObject.Instance.NoticBackColor; break;

                case LogShowMode.WARN: lvi.ForeColor = ConfigObject.Instance.WarnForeColor; lvi.BackColor = ConfigObject.Instance.WarnBackColor; break;

                case LogShowMode.ERROR: lvi.ForeColor = ConfigObject.Instance.ErrorForeColor; lvi.BackColor = ConfigObject.Instance.ErrorBackColor; break;

                case LogShowMode.FATAL: lvi.ForeColor = ConfigObject.Instance.FatalForeColor; lvi.BackColor = ConfigObject.Instance.FatalBackColor; break;
                }

                if (text.Contains("[Tmp]"))
                {
                    lvi.Text = lvi.Text.Replace("[Tmp]", "-------------TMP DEBUG LOG------------");
                    lvi.Font = new Font("Arial", 11, FontStyle.Underline | FontStyle.Bold);
                }

                this.listView1.Items.Add(lvi);
                if (lastFocusTime == null || (DateTime.Now - lastFocusTime).TotalSeconds >= 0.2)
                {
                    this.listView1.EnsureVisible(this.listView1.Items.Count - 1);
                    this.listView1.Items[this.listView1.Items.Count - 1].Checked = true;
                    lastFocusTime = DateTime.Now;
                }
            }
        }
        public static void AddLog(string text)
        {
            if (string.IsNullOrEmpty(text))
            {
                return;
            }
            if (text[0] != '[' || text.Contains("[print_frame]"))
            {
                return;
            }

            LogShowMode   type = LogShowMode.DEBUG;
            LogShowDevice dev  = LogShowDevice.ROL;

            var datas = text.Replace("][", "]").Split(']');

            if (datas.Length > 2)
            {
                switch (datas[2])
                {
                case "loginSrv": dev = LogShowDevice.LGI; break;

                case "dbSrv": dev = LogShowDevice.DBS; break;
                }
            }
            if (datas.Length > 6)
            {
                switch (datas[6])
                {
                case "WARNING": type = LogShowMode.WARN; break;

                case "ERROR": type = LogShowMode.ERROR; break;

                case "FATAL": type = LogShowMode.FATAL; break;

                case "CRITICAL": type = LogShowMode.FATAL; break;
                }
            }

            var newLog = new LogItem {
                Id = logIndex++, Type = type, Text = text, Device = dev
            };

            items.AddLast(newLog);
            if (LogCount >= ConfigObject.Instance.MaxLogCount)
            {
                var firstId = items.First.Value.Id;
                items.RemoveFirst();
                RemoveTextHandle(firstId);
            }

            if (newLog.Text.Contains("DGServerNode.AllServerRunning"))
            {
                ProcessHelper.SetProcessState(newLog.Device, ServerRunState.Running);
            }
            else if (newLog.Text.Contains("DGServerNode.DoShutdown"))
            {
                ProcessHelper.SetProcessState(newLog.Device, ServerRunState.Shutdown);
            }

            if (!ShowLog)
            {
                return;
            }

            //if ((type & filterMode) == 0 || (dev & filterDevice) == 0)
            //    return;
            //if (!string.IsNullOrEmpty(filterWords) && !text.Contains(filterWords))
            //    return;
            AppendTextHandle(newLog.Id, text, type);
        }
 public static void SetMode(LogShowMode md)
 {
     filterMode = md;
     RefreshItems();
 }