我正在试验捆绑到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对象,并且颜色使您可以查看系统的哪个部分在轻松地完成工作。

07-24 15:18