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 的方式以及对获取到对象后的操作等内容,并且要确保配置文件中的路径准确无误,符合实际的使用环境哦。