当前位置: 首页 > article >正文

C#.net CAD二次开发调试时进行日志记录并输出错误

以下是使用  System.Diagnostics.Trace  类来记录日志,并将日志另存到桌面的示例代码,应用于AutoCAD.NET C#开发中处理通过  ObjectId  获取对象相关操作的日志记录场景(可根据实际需求调整代码细节):

 

步骤一:添加配置文件( app.config )

 

首先,在项目根目录下添加一个名为  app.config  的配置文件(如果已有可直接编辑),内容如下:

 

xml

<?xml version="1.0" encoding="utf-8"?>

<configuration>

  <system.diagnostics>

    <trace autoflush="true" indentsize="4">

      <listeners>

        <add name="TextWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\Users\你的用户名\Desktop\ObjectIdAccessLog.txt" />

      </listeners>

    </trace>

  </system.diagnostics>

</configuration>

 

 

注意要将上述配置文件中  initializeData  属性里的路径中的“你的用户名”替换为实际电脑的用户名,这样就能指定日志文件输出到桌面且文件名是  ObjectIdAccessLog.txt  了。

 

步骤二:编写C#代码

 

以下是主要的C#代码逻辑,用于在通过  ObjectId  获取对象时进行日志记录并按照配置输出到桌面的文件中:

 

csharp

using System.Diagnostics;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Runtime;

 

namespace TraceLoggingObjectIdAccessToDesktop

{

    public class ObjectIdAccessDesktopLogger

    {

        [CommandMethod("DesktopTraceCheckObjectId")]

        public static void DesktopTraceCheckObjectById()

        {

            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

 

            using (Transaction tr = db.TransactionManager.StartTransaction())

            {

                ObjectId objectId = // 假设获取一个ObjectId,比如从模型空间获取(此处仅作示意获取方式)

                    ((BlockTableRecord)tr.GetObject(db.BlockTableId, OpenMode.ForRead)[BlockTableRecord.ModelSpace]).Cast<ObjectId>().FirstOrDefault();

 

                try

                {

                    if (!objectId.IsErased)

                    {

                        Entity entity = (Entity)tr.GetObject(objectId, OpenMode.ForWrite);

                        // 对获取到的对象进行操作,此处省略具体操作代码

                    }

                    else

                    {

                        Trace.WriteLine($"对象 {objectId} 已被删除。", "ObjectIdAccess");

                    }

                }

                catch (Autodesk.AutoCAD.Runtime.Exception ex)

                    {

                        Trace.WriteLine($"无法获取对象 {objectId},错误原因: {ex.Message}", "ObjectIdAccess");

                    }

 

                tr.Commit();

            }

        }

    }

}

 

 

在上述代码中:

 

- 通过  System.Diagnostics.Trace  类的  Trace.WriteLine  方法来记录日志信息,传递两个参数,第一个是要记录的具体日志内容,第二个是自定义的类别(方便后续筛选查看不同类别的日志,这里用  "ObjectIdAccess"  来标识与通过  ObjectId  获取对象相关的日志)。

- 在  app.config  文件中配置了  TextWriterTraceListener ,指定将日志输出到桌面的  ObjectIdAccessLog.txt  文件中,并且设置  autoflush="true"  确保日志能及时写入文件,避免缓冲导致数据丢失等问题(尤其在程序意外退出等情况时)。

 

这样,在运行相关AutoCAD命令(在这个示例中是  DesktopTraceCheckObjectId  命令)时,涉及通过  ObjectId  获取对象的操作情况就会被记录下来,并保存到桌面指定的日志文件中,方便后续查看和分析了。

 

需注意,实际应用中可根据具体情况完善获取  ObjectId  的方式以及对获取到对象后的操作等内容,并且要确保配置文件中的路径准确无误,符合实际的使用环境哦。


http://www.kler.cn/a/445866.html

相关文章:

  • C盘下的文件夹
  • 《全面解析 QT 各版本:特性、应用与选择策略》
  • onlyoffice连接器 二次开发 合同等制式模板化技术开发方案【三】
  • Vue与React:前端框架的巅峰对决
  • 如何利用Python爬虫获得Lazada商品评论列表
  • Kingbase数据库备份还原操作手册
  • 【Python】【数据分析】深入探索 Python 数据可视化:Plotly 绘图库全面解析
  • 使用LS-DYNA对秸秆进行切削仿真(记录版)
  • 免费开源!推荐一款网页版数据库管理工具!
  • edge_tts 实现实时流式语音播放输出
  • 安装指定版本的python这里以3.11为例子
  • 【Tomcat】第五站:Servlet容器
  • mfc140.dll是什么东西?mfc140.dll缺失的几种具体解决方法
  • 腾讯云云开发 Copilot 深度探索与实战分享
  • STM32单片机芯片与内部33 ADC 单通道连续DMA
  • 子域提取工具,子域名收集神器,支持多种数据源和枚举选项,域名发现工具,可以为任何目标枚举海量的有效子域名,安全侦察工具,利用证书透明原则监控部署的新子域
  • html在线转换工具集合大全
  • AFL-Fuzz 的使用
  • 五十个网络安全学习项目——(九)无线网络安全分析
  • windows 钉钉缓存路径不能修改 默认C盘解决方案
  • Python 【大模型】之 使用千问Qwen2-VL 大模型训练LaTeX数学公式图,并进行LaTeX图识别测试
  • 校园快领系统|Java|SSM|VUE| 前后端分离
  • 模型训练之优化器
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍05-基于堆叠查询的SQL注入(Stacked Queries SQL Injection)
  • java全栈day17--Web后端实战(java操作数据库)
  • springboot3访问第三方接口