news 2026/2/20 18:09:37

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/2/18 6:09:37

AI智能体分析秘籍:5分钟部署侦测模型,显存不足不再愁

AI智能体分析秘籍&#xff1a;5分钟部署侦测模型&#xff0c;显存不足不再愁 1. 为什么你需要这个解决方案 如果你正在本地运行AI侦测模型&#xff0c;大概率遇到过这些问题&#xff1a; 跑着跑着突然报错"CUDA out of memory"&#xff0c;显存爆炸了调小batch_si…

作者头像 李华
网站建设 2026/2/15 10:56:10

Python模块与包管理:从基础到现代工程实践

Python模块与包管理&#xff1a;从基础到现代工程实践 引言&#xff1a;Python模块化设计的哲学 Python语言之所以能在数据科学、Web开发、自动化运维等领域占据主导地位&#xff0c;其优雅的模块化设计功不可没。模块化不仅是一种代码组织方式&#xff0c;更是Python哲学"…

作者头像 李华
网站建设 2026/2/19 23:05:27

什么是NoF+

文章目录为什么需要NoF&#xff1f;NoF与NoF比有哪些优势NoF的网络架构NoF的关键技术NoF的核心组件全闪存时代背景下&#xff0c;传统的FC&#xff08;Fibre Channel&#xff0c;网状通道&#xff09;存储网络已经无法满足全闪存数据中心的要求&#xff0c;NVMe&#xff08;Non…

作者头像 李华
网站建设 2026/2/16 20:37:15

B 端表单标签对齐指南:兼顾效率与体验的设计选择

表单是 B 端系统的核心交互组件&#xff0c;而表单标签的对齐方式看似微小&#xff0c;却直接影响用户的填写效率、浏览体验和操作流畅度。在 Ant Design、Element UI 等成熟组件库中&#xff0c;行内标签、顶标签、左标签&#xff08;含文字左对齐、右对齐&#xff09;等样式各…

作者头像 李华
网站建设 2026/2/7 5:05:57

没显卡怎么玩AI Agent?预置镜像2块钱体验最新技术

没显卡怎么玩AI Agent&#xff1f;预置镜像2块钱体验最新技术 1. AI Agent是什么&#xff1f;为什么需要GPU&#xff1f; AI Agent&#xff08;人工智能代理&#xff09;就像你的数字助手&#xff0c;它能接收任务、分析环境、执行操作并不断学习优化。想象你有一个24小时待命…

作者头像 李华
网站建设 2026/2/17 12:31:54

没GPU怎么做AI开发?实体识别云端环境,学生特惠1元/时

没GPU怎么做AI开发&#xff1f;实体识别云端环境&#xff0c;学生特惠1元/时 引言&#xff1a;当AI竞赛遇上硬件瓶颈 参加AI竞赛的计算机系学生常常会遇到这样的困境&#xff1a;比赛需要搭建实体识别模块&#xff0c;但学校机房的GPU资源早已被抢占一空&#xff0c;自己的笔…

作者头像 李华