188 lines
6.5 KiB
C#
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; }
|
|
}
|
|
}
|
|
}
|