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(); }