123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using DevExpress.Utils;
- using DevExpress.XtraEditors;
- using Ips.Library.Basic;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace Ips.Library.DxpLib
- {
- public partial class LogCtrl : XtraUserControl
- {
- public LogCtrl()
- {
- InitializeComponent();
- InitCtrl();
- IpsLogger.Logged += (self, e) =>
- {
- switch (e.LogType)
- {
- case LogType.Info:
- Serilog.Log.Information(e.Content);
- break;
- case LogType.Warn:
- Serilog.Log.Warning(e.Exception, e.Content);
- break;
- case LogType.Error:
- Serilog.Log.Error(e.Exception, e.Content);
- break;
- }
- if (e.WriteToUI)
- {
- if (e.Exception != null && !string.IsNullOrWhiteSpace(e.Exception.Message) && e.Content != e.Exception.Message)
- e.Content = $"{e.Content},{e.Exception.Message}";
- this.AddLog(e.LogType, e.Content);
- }
- };
- this.Dock = DockStyle.Fill;
- }
- public bool AutoMoveToLastLine { get; set; } = true;
- public LogType MinLevel { get; set; } = LogType.Info;
- SvgImageCollection _logTypeImgList;
- BindingList<LogInfo> LogList = new BindingList<LogInfo>();
- public void AddInfo(string msg)
- {
- AddLog(LogType.Info, msg);
- }
- public void AddWarn(string msg)
- {
- AddLog(LogType.Warn, msg);
- }
- public void AddError(string msg)
- {
- AddLog(LogType.Error, msg);
- }
- public void AddLog(LogType logType, string logContent)
- {
- if (logType < MinLevel) return;
- try
- {
- this.Invoke(() =>
- {
- LogList.Add(new LogInfo() { LogType = logType, LogTime = DateTime.Now, LogContent = logContent });
- while (LogList.Count > 2000)
- {
- LogList.RemoveAt(0);
- }
- if (AutoMoveToLastLine) gvLog.MoveLastVisible();
- });
- }
- catch (InvalidOperationException)
- {
- //屏蔽UI退出释放的异常
- }
- }
- private void InitCtrl()
- {
- repLogTypeImgCbx.Items.AddEnum<LogType>();
- for (int i = 0; i < repLogTypeImgCbx.Items.Count; i++) repLogTypeImgCbx.Items[i].ImageIndex = i;
- _logTypeImgList = new SvgImageCollection(this.components);
- ((System.ComponentModel.ISupportInitialize)(_logTypeImgList)).BeginInit();
- //_logTypeImgList.Add("next", "image://svgimages/arrows/next.svg");
- _logTypeImgList.Add("about", "image://svgimages/outlook inspired/about.svg");
- _logTypeImgList.Add("warning", "image://svgimages/status/warning.svg");
- _logTypeImgList.Add("highimportance", "image://svgimages/outlook inspired/highimportance.svg");
- ((System.ComponentModel.ISupportInitialize)(_logTypeImgList)).EndInit();
- repLogTypeImgCbx.SmallImages = _logTypeImgList;
- }
- private void LogCtrl_Load(object sender, EventArgs e)
- {
- grdLog.DataSource = LogList;
- }
- private void IpsLoggerLogged(object sender, IpsLogEventArg e)
- {
- AddLog(e.LogType, e.Content);
- }
- private void btnClearLog_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- LogList.Clear();
- }
- private void btnCopyRow_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- gvLog.CopyToClipboard();
- }
- private void btnCopyRowCell_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- }
- private void btnAutoMoveToLast_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- AutoMoveToLastLine = btnAutoMoveToLast.Checked;
- }
- private void gvLog_PopupMenuShowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e)
- {
- btnCopyRow.Enabled = gvLog.FocusedRowObject != null;
- logMenu.ShowPopup(Cursor.Position);
- }
- }
- public class LogInfo
- {
- public LogType LogType { get; set; }
- public DateTime LogTime { get; set; }
- public string LogContent { get; set; }
- }
- }
|