我正在尝试捆绑到Delphi XE中的CodeSite Express。我想使用Category
这样的功能:
CodeSite.Category := 'SomeCategory';
CodeSite.EnterMethod ('SomeMethod');
try
DoSomething;
finally
CodeSite.ExitMethod ('SomeMethod');
end;
问题在于,如果DoSomething
包含设置类别的日志记录代码,那么ExitMethod
将会以不同的类别结束,并会在查看器中炸毁整个层次结构。
更糟糕的是,如果线程插入:设置Category
然后调用日志命令显然不是原子操作,因此使用CodeSite日志记录的两个线程无法真正使用Category
。至少这就是我在日志中的样子。我原以为Category
是线程局部的,但似乎不是。
在嵌套日志记录和线程的上下文中处理类别的正确模式是什么?
谢谢!
答案 0 :(得分:6)
创建另一个Codesite对象,可能每个线程对应一个,并设置该对象类别。
有多种方法可以做到这一点。你可以拥有一个特定的对象,比如MyThreadCodesite:TCodeSite;你写的,或者你可以为线程定义一个名为“Codesite”的属性并引用该对象。因此,您的线程代码看起来完全相同,因为它表示“Codesite.Send('hello');”但引用线程的对象。
一旦完成,这种方法很有效。我在一个项目中有大约十个TCodesite对象,着色可以让你看到系统的哪个部分很容易做到。