我正在试验捆绑到CodeSite XE中的Delphi。我想像这样使用Category特性:
CodeSite.Category := 'SomeCategory';
CodeSite.EnterMethod ('SomeMethod');
try
DoSomething;
finally
CodeSite.ExitMethod ('SomeMethod');
end;问题是,如果DoSomething还包含设置类别的日志记录代码,那么ExitMethod将以不同的类别结束,并将破坏查看器中的整个层次结构。
更糟糕的是,如果使用线程:设置Category然后调用日志命令显然不是原子操作,因此使用CodeSite日志记录的两个线程不能真正使用Category。至少在我的日志中是这样的。我原本期望Category是线程本地的,但它似乎不是。
在嵌套日志记录和线程上下文中处理类别的正确模式是什么?
谢谢!
发布于 2011-10-07 20:10:35
创建另一个Codesite对象,可能每个线程一个,并设置该对象类别。
有多种方法可以做到这一点。您可以有一个特定的对象,如MyThreadCodesite : TCodeSite;,您可以将其写入,或者您可以为线程定义一个称为"Codesite“的属性并引用该对象。因此,您的线程代码看起来完全一样,因为它说的是"Codesite.Send('hello');“,但引用了线程的对象。
一旦你这样做了,它就能很好地工作。我在一个项目中有大约10个TCodesite对象,着色让您可以轻松地看到系统的哪个部分在做什么。
https://stackoverflow.com/questions/7686941
复制相似问题