using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using ChuPiao.AutoPrint.Desktop.StatusBar;
using ChuPiao.AutoPrint.Machine;
using ChuPiao.AutoPrint.Services;
using ChuPiao.Common.Models;
using ChuPiao.Common.Utils;
using log4net;
using log4net.Appender;
using log4net.Config;
using log4net.Core;
using ChuPiao.AutoPrint.Services.AutoPrint;
namespace ChuPiao.AutoPrint.Desktop.Workbench
{
public partial class LogOutputView : UserControl
{
public LogOutputView()
{
InitializeComponent();
}
private string _currentLogName = "all";
private MemoryAppender _memoryAppender;
private void LogOutputView_Load(object sender, EventArgs e)
{
try
{
this.Dock = DockStyle.Fill;
this.Text = "日志输出";
this.flowLayoutPanel1.Controls.Clear();
//配置MemoryAppender
_memoryAppender = new MemoryAppender();
BasicConfigurator.Configure(_memoryAppender);
RadioButton radioButton = new RadioButton();
radioButton.Checked = true;
radioButton.CheckedChanged += new EventHandler(radioButton_CheckedChanged);
radioButton.Text = "全部日志";
radioButton.Tag = "all";
radioButton.Name = "radioButton_all";
radioButton.AutoSize = true;
this.flowLayoutPanel1.Controls.Add(radioButton);
radioButton = new RadioButton();
radioButton.Checked = false;
radioButton.CheckedChanged += new EventHandler(radioButton_CheckedChanged);
radioButton.Text = "系统日志";
radioButton.Tag = "default";
radioButton.Name = "radioButton_default";
radioButton.AutoSize = true;
this.flowLayoutPanel1.Controls.Add(radioButton);
foreach (ILotMachine lotMachine in LotMachineService.LotMachineList.Values)
{
M_MachineEntity entity = lotMachine.MachineInfo;
ILog log = LogManager.GetLogger(entity.M_Number);
radioButton = new RadioButton();
radioButton.Checked = false;
radioButton.CheckedChanged += new EventHandler(radioButton_CheckedChanged);
radioButton.Text = entity.M_Number + "日志";
radioButton.Tag = log.Logger.Name;
radioButton.Name = "radioButton_" + entity.M_Number;
radioButton.AutoSize = true;
this.flowLayoutPanel1.Controls.Add(radioButton);
//LogUtil.AddMemoryAppender(log, _memoryAppender);
}
_logRefreshTimer.Enabled = true;
toolStripButtonStopBell.Enabled = false;
}
catch (Exception exception)
{
MessageBox.Show(string.Concat("日志输出窗口加载异常:", exception));
}
}
///
/// 切换日志类别
///
///
///
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
try
{
this.txtLog.Clear();
RadioButton radioButton = sender as RadioButton;
if (radioButton != null && radioButton.Tag != null)
{
_currentLogName = radioButton.Tag.ToString();
//if (_currentLogName != "all")
//{
// this.txtLog.Lines = LogUtil.GetLastLogContentByName(_currentLogName).ToArray();
// this.txtLog.AppendText(Environment.NewLine);
// this.txtLog.ScrollToCaret();
//}
}
}
catch (Exception exception)
{
MessageBox.Show(string.Concat("切换日志类别异常:", exception));
}
}
//日志显示最大行数
private const int MAXLOGLINE = 500;
//日志显示最小行数
private const int MINLOGLINE = 100;
///
/// 日志定时刷新事件
///
///
///
private void LogRefreshTimerTick(object sender, EventArgs e)
{
try
{
LoggingEvent[] events = _memoryAppender.GetEvents();
if (events != null && events.Length > 0)
{
_memoryAppender.Clear();
string logname = _currentLogName;
foreach (LoggingEvent loggingEvent in events)
{
if (loggingEvent.Level.Value >= 60000)
{
//warn以上级别日志
//if (txtWarnLog.Lines.Length > MAXLOGLINE)
//{
// //仅保留最近的n行(n=MINLOGLINE)
// string[] tmpArr = new string[MINLOGLINE];
// Array.Copy(txtWarnLog.Lines, txtWarnLog.Lines.Length - MINLOGLINE, tmpArr, 0, MINLOGLINE);
// this.txtWarnLog.Lines = tmpArr;
//}
string line = string.Format("{0} [{1}] {2} {3} - {4}{5}",
loggingEvent.TimeStamp.ToString("yyyy-MM-dd HH:mm:ss fff"),
loggingEvent.ThreadName, loggingEvent.Level.Name,
loggingEvent.LoggerName, loggingEvent.RenderedMessage,
Environment.NewLine);
txtWarnLog.AppendText(line);
txtWarnLog.ScrollToCaret();
if (BeepUtil.notUseBeep)
{
toolStripButtonStopBell.Enabled = true;
//axWindowsMediaPlayer1.URL = BeepUtil.fileToPlay;
//axWindowsMediaPlayer1.settings.autoStart = false;
//axWindowsMediaPlayer1.settings.volume = 80;
//axWindowsMediaPlayer1.settings.setMode("loop", true);
//axWindowsMediaPlayer1.Ctlcontrols.play();
}
else
{
StatusBarService.ShowWarnButton();
}
//有报这个错,就不允许开始出票
if (loggingEvent.RenderedMessage.Contains("函数不正确"))
{
AutoPrintService.isCOMOK = false;
MessageService.ShowMessage("COM口异常,不能开启出票!!!请尝试重启软件、电脑", "操作提示");
}
}
else
{
if (logname != "default" && loggingEvent.Level.Value <= 30000)
{
//debug日志
continue;
}
//info日志
if (logname != "all" && loggingEvent.LoggerName != logname)
{
//仅显示当前指定类别的日志
continue;
}
//if (txtLog.Lines.Length > MAXLOGLINE)
//{
// //仅保留最近的n行(n=MINLOGLINE)
// string[] tmpArr = new string[MINLOGLINE];
// Array.Copy(txtLog.Lines, txtLog.Lines.Length - MINLOGLINE, tmpArr, 0, MINLOGLINE);
// this.txtLog.Lines = tmpArr;
//}
string line = string.Format("{0} [{1}] {2} {3} - {4}{5}",
loggingEvent.TimeStamp.ToString("yyyy-MM-dd HH:mm:ss fff"),
loggingEvent.ThreadName, loggingEvent.Level.Name,
loggingEvent.LoggerName, loggingEvent.RenderedMessage,
Environment.NewLine);
txtLog.AppendText(line);
txtLog.ScrollToCaret();
}
}
if (txtWarnLog.Lines.Length > MAXLOGLINE)
{
//仅保留最近的n行(n=MINLOGLINE)
string[] tmpArr = new string[MINLOGLINE];
Array.Copy(txtWarnLog.Lines, txtWarnLog.Lines.Length - MINLOGLINE, tmpArr, 0, MINLOGLINE);
this.txtWarnLog.Lines = tmpArr;
}
if (txtLog.Lines.Length > MAXLOGLINE)
{
//仅保留最近的n行(n=MINLOGLINE)
string[] tmpArr = new string[MINLOGLINE];
Array.Copy(txtLog.Lines, txtLog.Lines.Length - MINLOGLINE, tmpArr, 0, MINLOGLINE);
this.txtLog.Lines = tmpArr;
}
}
}
catch (Exception exception)
{
LoggingService.Debug(string.Concat("刷新日志异常:",exception));
}
}
///
/// 双击文本框查看日志
///
///
///
private void txtLog_DoubleClick(object sender, EventArgs e)
{
try
{
if (_currentLogName != "all")
{
string[] msgs = LogUtil.GetLastLogContentByName(_currentLogName).ToArray();
ShowLogForm form = new ShowLogForm(msgs);
form.Show(this);
}
}
catch (Exception exception)
{
MessageBox.Show(string.Concat("查看日志信息异常:",exception));
}
}
///
/// 复制到剪切板
///
///
///
private void toolStripButtonCopy_Click(object sender, EventArgs e)
{
ClipboardUtil.SetText(this.txtWarnLog.Text);
}
///
/// 剪切到剪切板
///
///
///
private void toolStripButtonCut_Click(object sender, EventArgs e)
{
ClipboardUtil.SetText(this.txtWarnLog.Text);
this.txtWarnLog.Text = "";
}
///
/// 清空
///
///
///
private void toolStripButtonClear_Click(object sender, EventArgs e)
{
this.txtWarnLog.Text = "";
}
///
/// 停止报警
///
///
///
private void toolStripButtonStopBell_Click(object sender, EventArgs e)
{
toolStripButtonStopBell.Enabled = false;
if (BeepUtil.notUseBeep)
{
//axWindowsMediaPlayer1.Ctlcontrols.stop();
}
else
{
BeepUtil.Instance().StopCurrent();
}
}
}
}