Files
1440WGJ/JY.Control/LogManagerControl.cs
T

188 lines
6.5 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace JYControl
{
public enum Logtype//枚举类型
{
Message,
Warning,
Error
}
public enum LogAddtype//枚举类型
{
MES,
local,
}
public partial class LogManagerControl : UserControl
{
static bool _newErrorInfo = false;
static int _ErrorCount = 0;
public LogManagerControl()
{
InitializeComponent();
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
}
private static readonly string logMesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs", "MESLogs");
private static readonly string loglocalPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs", "localLogs");
private static LogManagerControl _manager = new LogManagerControl();
delegate void DoAddMessage(string message, LogAddtype logAddtype, Logtype logType = Logtype.Message);
//delegate void DoDelete();
public static void AddLog(string strLog, LogAddtype logAddtype, Logtype logType = Logtype.Message)
{
if (_manager.listView1.InvokeRequired)
{
DoAddMessage dam = new DoAddMessage(AddLog);
_manager.listView1.Invoke(dam, strLog,logAddtype, logType);
}
else
{
string strDate = DateTime.Now.ToString("HH:mm:ss:ff");
ListViewItem item = new ListViewItem();
switch (logType)
{
case Logtype.Message:
if (strLog.Contains("接收到客户端连接") || strLog.Contains("TCP服务器启动监听成功"))
{
item.ForeColor = Color.White;
item.BackColor = Color.SeaGreen;
}
break;
case Logtype.Warning:
item.BackColor = Color.Yellow;
strLog = "警告:" + strLog;
break;
case Logtype.Error:
item.BackColor = Color.Red;
item.ForeColor = Color.White;
strLog = "错误:" + strLog;
_newErrorInfo = true;
_ErrorCount++;
break;
default:
break;
}
item.Text = strDate;
item.SubItems.Add(strLog);
_manager.listView1.BeginUpdate();
_manager.listView1.Items.Insert(0, item);//添加在第一行
//_manager.listView1.Items.Add(item);//添加在最后一行
int ff = _manager.listView1.Items.Count - 1;
if (_manager.listView1.Items.Count > 150)
{
_manager.listView1.Items.RemoveAt(ff);
}
//_manager.listView1.Items[_manager.listView1.Items.Count - 1].EnsureVisible();
_manager.listView1.EndUpdate();
string fileName = $"{DateTime.Now.ToString("yyyyMMdd")}.txt";
switch (logAddtype)
{
case LogAddtype.MES:
if (!Directory.Exists(logMesPath))
{
Directory.CreateDirectory(logMesPath);
}
string logMesFilePath = Path.Combine(logMesPath, fileName);
using (StreamWriter sw = new StreamWriter(logMesFilePath, true))
{
sw.WriteLine(strDate + " " + logType.ToString() + " " + strLog);
}
break;
case LogAddtype.local:
if (!Directory.Exists(loglocalPath))
{
Directory.CreateDirectory(loglocalPath);
}
string loglocalFilePath = Path.Combine(loglocalPath, fileName);
using (StreamWriter sw = new StreamWriter(loglocalFilePath, true))
{
sw.WriteLine(strDate + " " + logType.ToString() + " " + strLog);
}
break;
default:
break;
}
//添加日志到log文件中
}
}
public static void ClearLog()
{
//if (_manager.listView1.InvokeRequired)
//{
// DoDelete dam = new DoDelete(ClearLog);
// _manager.listView1.Invoke(dam);
//}
//else
//{
//if (_manager.listView1.Items.Count > 200)
//{
// _manager.listView1.Items.RemoveAt(item);
//}
_manager.listView1.Items.Clear();
//}
}
/// <summary>
/// 双缓冲ListView ,解决闪烁
/// </summary>
public class DoubleBufferListView : System.Windows.Forms.ListView
{
public DoubleBufferListView()
{
SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
}
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0014) // 禁掉清除背景消息
return;
base.WndProc(ref m);
}
public static bool HasNewErrorInfo
{
get { return _newErrorInfo; }
set { _newErrorInfo = value; }
}
public static int ErrorInfoCount
{
get { return _ErrorCount; }
set { _ErrorCount = 0; }
}
public static LogManagerControl Manager
{
get { return LogManagerControl._manager; }
set { LogManagerControl._manager = value; }
}
}
}