news 2026/4/23 13:14:41

VisionPro二开之日志Log模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VisionPro二开之日志Log模块

VisionPro二开之日志Log模块

一 配置log4net.config文件

<?xmlversion="1.0"encoding="utf-8"?><configuration><configSections><sectionname="log4net"type="System.Configuration.IgnoreSectionHandler"/></configSections><log4net><!--配置日志的目标存储形式--><root><!--输出等级--><levelvalue="ALL"/><!--控制台形式--><appender-refref="ConsoleAppender"/><!--文件形式--><appender-refref="FileAppender"/></root><!--控制台形式--><appendername="ConsoleAppender"type="log4net.Appender.ConsoleAppender"><layouttype="log4net.Layout.PatternLayout"value="%date [%thread] %-5level %logger - %message%newline"/></appender><!--文件形式--><appendername="FileAppender"type="log4net.Appender.FileAppender"><!--文件路径--><filevalue="Log/log-file.txt"/><!--是否追加--><appendToFilevalue="true"/><!--显示格式--><layouttype="log4net.Layout.PatternLayout"><paramname="Header"value="&#xD;&#xA;-------------------------软件启动-----------------------&#xD;&#xA;"/><paramname="Footer"value="&#xD;&#xA;-------------------------软件关闭-----------------------&#xD;&#xA;"/><paramname="ConversionPattern"value="%d{yyyy-MM-dd HH:mm:ss} --%-5p-- %m%n"/></layout></appender></log4net></configuration>

二 绑定log4net.config文件

[assembly:log4net.Config.XmlConfigurator(ConfigFile="log4net.config",ConfigFileExtension="config",Watch=true)]

三 创建文件夹-LogModule

Log

usinglog4net;usinglog4net.Layout;usinglog4net.Repository.Hierarchy;usingMicrosoft.VisualBasic.Logging;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceAOI缺陷检测软件_VisionPro{publicclassLog{// 1.获取log4net里面的日志类实例publicstaticILoglog=LogManager.GetLogger("myLog");// 2.根据类实现5个等级日志的记录publicstaticvoidInfo(stringmsg){log.Info(msg);}publicstaticvoidDebug(stringmsg){log.Debug(msg);}publicstaticvoidWarn(stringmsg){log.Warn(msg);}publicstaticvoidError(stringmsg){log.Error(msg);}publicstaticvoidFatal(stringmsg){log.Fatal(msg);}// 3.把日志内容同步到显示控件上publicstaticvoidInitTextBox(TextBoxtextBox){if(textBox==null)return;varlogPattern="%d{yyyy-MM-dd HH:mm:ss:fff} --%-5p-- %m%n";TextBoxBaseAppenderappender=newTextBoxBaseAppender();appender.TextBox=textBox;// 核心appender.Layout=newPatternLayout(logPattern);Loggerlog4netLogger=log.LoggerasLogger;log4netLogger.AddAppender(appender);}}}

TextBoxBaseAppender

usinglog4net.Appender;usinglog4net.Core;usinglog4net.Layout;usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceAOI缺陷检测软件_VisionPro{/// <summary>////// </summary>/// <summary>/// 文本框添加信息类/// </summary>publicclassTextBoxBaseAppender:AppenderSkeleton{/// <summary>/// 文本输入框/// </summary>publicTextBoxTextBox{get;set;}/// <summary>/// 构造器/// </summary>staticTextBoxBaseAppender(){}/// <summary>/// 复现Append方法,记录日志,就会调用这个方法/// </summary>/// <param name="loggingEvent"></param>protectedoverridevoidAppend(LoggingEventloggingEvent){PatternLayoutpatternLayout=(PatternLayout)this.Layout;stringstr=string.Empty;if(patternLayout!=null){str=patternLayout.Format(loggingEvent);if(loggingEvent.ExceptionObject!=null)str+=loggingEvent.ExceptionObject.ToString()+Environment.NewLine;}elsestr=loggingEvent.LoggerName+"-"+loggingEvent.RenderedMessage+Environment.NewLine;// 打印printf(str);}privateboolm_Flag=false;//线程开启privateList<string>m_LogStrList=newList<string>();/// <summary>/// 锁/// </summary>privateObjectm_LockObj=newObject();/// <summary>/// 打印信息/// </summary>/// <param name="str"></param>privatevoidprintf(stringstr){lock(m_LockObj){Debug.WriteLine(str);m_LogStrList.Add(str);}if(m_Flag==false){m_Flag=true;Task.Run(()=>{while(true){Thread.Sleep(300);//日志刷新周期300ms 避免抢占主线程if(m_LogStrList.Count==0)continue;List<string>tempList=newList<string>();lock(m_LockObj){for(inti=0;i<m_LogStrList.Count;i++){tempList.Add(m_LogStrList[i]);}m_LogStrList.Clear();}if(tempList.Count>0){try{// 判别控件是否创建if(TextBox.IsHandleCreated){// 跨线程TextBox.Invoke(newAction(()=>{try{if(TextBox.Lines.Length>100){TextBox.Clear();}foreach(varstrTempintempList){ListViewItemitem=newListViewItem();item.Text=strTemp.ToString();TextBox.AppendText(strTemp);}}catch(Exceptione){throwe;}}));}}catch(TaskCanceledException){//TaskCanceledException 异常是关闭时候可能出现 直接忽略}catch(Exception){throw;}}}});}}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 20:52:51

智能监控AI懒人包:一键部署复杂模型,省去7天配置时间

智能监控AI懒人包&#xff1a;一键部署复杂模型&#xff0c;省去7天配置时间 引言&#xff1a;传统安防的AI转型痛点 对于传统安防厂商来说&#xff0c;向AI智能监控转型就像让一位机械手表匠突然学习编程——技术栈完全不同&#xff0c;学习成本高得吓人。我接触过不少这类企…

作者头像 李华
网站建设 2026/4/22 17:46:29

原创诗集(陆续更新)

狂客行登高望远云海苍茫&#xff0c; 弹琴奏曲千古绝唱。 饮酒吟诗扬鞭舞剑&#xff0c; 金戈铁马荡气回肠。临风把酒慨当以慷&#xff0c; 醉里挑灯剑影流光。 胸藏丘壑志在四方&#xff0c; 不负此生年少疏狂。醉后拔剑斩浮云&#xff0c; 醒来拂袖走天涯。 一身磊落任平生&a…

作者头像 李华
网站建设 2026/4/17 20:44:32

智能合约安全检测:云端AI工具5分钟扫描,1块钱查100个合约

智能合约安全检测&#xff1a;云端AI工具5分钟扫描&#xff0c;1块钱查100个合约 1. 为什么需要智能合约安全检测&#xff1f; 智能合约就像区块链世界里的"自动售货机"——一旦部署就无法修改&#xff0c;但里面可能藏着各种漏洞。2023年DeFi领域因合约漏洞损失超…

作者头像 李华
网站建设 2026/4/17 13:40:00

AI侦测模型部署神器:1小时1块随用随停,不再浪费算力

AI侦测模型部署神器&#xff1a;1小时1块随用随停&#xff0c;不再浪费算力 1. 为什么你需要这个解决方案 作为小公司的CTO&#xff0c;你可能经常面临这样的困境&#xff1a;想要定期测试最新的AI侦测模型&#xff0c;但又不想承担高昂的专职运维成本和闲置的包月服务器费用…

作者头像 李华
网站建设 2026/4/6 17:29:21

没GPU如何做智能异常检测?阿里云同款AI服务2块钱体验

没GPU如何做智能异常检测&#xff1f;阿里云同款AI服务2块钱体验 1. 为什么你需要智能异常检测&#xff1f; 想象一下你经营着一家电商平台&#xff0c;每天产生数百万条用户行为日志。突然某天凌晨2点&#xff0c;支付成功率从85%暴跌到30%&#xff0c;而你的运维团队还在人…

作者头像 李华
网站建设 2026/3/30 0:42:13

各种主流视频格式的区别

各种主流视频格式的区别详细对比各种视频格式&#xff0c;需要从两个核心层面来看&#xff1a;封装格式&#xff08;文件后缀&#xff09;和视频编码格式&#xff08;压缩技术&#xff09;。同一个封装文件&#xff08;如.mp4&#xff09;里可以使用不同的编码&#xff08;如H.…

作者头像 李华