CodeSite类别和线程

jpf*_*ius 2 delphi logging multithreading codesite delphi-xe

我正在尝试捆绑到Delphi XE中的CodeSite Express.我想使用这样的Category功能:

CodeSite.Category := 'SomeCategory';
CodeSite.EnterMethod ('SomeMethod');
try
  DoSomething;
finally
  CodeSite.ExitMethod ('SomeMethod');
end;
Run Code Online (Sandbox Code Playgroud)

问题是,如果DoSomething包含设置类别的日志记录代码,那么结果ExitMethod将以不同的类别结束,并将在查看器中炸毁整个层次结构.

更糟糕的是,如果线程插入:设置Category然后调用日志命令显然不是原子操作,因此使用CodeSite日志记录的两个线程无法真正使用Category.至少这就是我在日志中的样子.我原本期望它Category是线程局部的,但似乎不是.

在嵌套日志记录和线程的上下文中处理类别的正确模式是什么?

谢谢!

mj2*_*008 6

创建另一个Codesite对象,可能每个线程对应一个,并设置该对象类别.

有多种方法可以做到这一点.你可以拥有一个特定的对象,比如MyThreadCodesite:TCodeSite; 你写的,或者你可以为线程定义一个名为"Codesite"的属性并引用该对象.因此,您的线程代码看起来完全相同,因为它表示"Codesite.Send('hello');" 但引用线程的对象.

完成后,这很有效.我在一个项目中有大约十个TCodesite对象,并且着色允许您查看系统的哪个部分正在轻松地执行操作.