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是线程局部的,但似乎不是.
在嵌套日志记录和线程的上下文中处理类别的正确模式是什么?
谢谢!
创建另一个Codesite对象,可能每个线程对应一个,并设置该对象类别.
有多种方法可以做到这一点.你可以拥有一个特定的对象,比如MyThreadCodesite:TCodeSite; 你写的,或者你可以为线程定义一个名为"Codesite"的属性并引用该对象.因此,您的线程代码看起来完全相同,因为它表示"Codesite.Send('hello');" 但引用线程的对象.
完成后,这很有效.我在一个项目中有大约十个TCodesite对象,并且着色允许您查看系统的哪个部分正在轻松地执行操作.