我正在试验捆绑到Delphi XE中的CodeSite Express。我想像这样使用Category
功能:
CodeSite.Category := 'SomeCategory';
CodeSite.EnterMethod ('SomeMethod');
try
DoSomething;
finally
CodeSite.ExitMethod ('SomeMethod');
end;
问题在于,如果
DoSomething
也包含设置类别的日志记录代码,则ExitMethod
最终将处于不同的类别中,并会破坏查看器中的整个层次结构。如果启动线程,则情况更糟:设置
Category
然后调用log命令显然不是原子操作,因此使用CodeSite日志记录的两个线程不能真正使用Category
。至少这就是我的日志中的样子。我本来希望Category
是线程本地的,但似乎不是。在嵌套日志记录和线程上下文中处理类别的正确模式是什么?
谢谢!
最佳答案
创建另一个Codesite对象,也许每个线程一个,然后设置该对象类别。
您可以通过多种方式执行此操作。您可能有一个特定的对象,例如MyThreadCodesite:TCodeSite;。您可以编写该代码,也可以为线程定义一个称为“ Codesite”的属性并引用该对象。这样,您的线程代码将看起来完全相同,因为它显示为“ Codesite.Send('hello');”。但引用线程的对象。
完成后,效果很好。我在一个项目中大约有十个TCodesite对象,并且颜色使您可以查看系统的哪个部分在轻松地完成工作。