multithreading - CodeSite 类别和线程

标签 multithreading delphi logging delphi-xe codesite

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

CodeSite.Category := 'SomeCategory';
CodeSite.EnterMethod ('SomeMethod');
try
  DoSomething;
finally
  CodeSite.ExitMethod ('SomeMethod');
end;

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

如果线程启动,情况会更糟:设置 Category 然后调用日志命令显然不是原子操作,因此使用 CodeSite 日志记录的两个线程不能真正使用 Category。至少在我的日志中是这样的。我原以为 Category 是线程本地的,但它似乎不是。

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

谢谢!

最佳答案

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

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

完成后效果很好。我在一个项目中有大约 10 个 TCodesite 对象,着色可以让您轻松查看系统的哪一部分在做什么。

关于multithreading - CodeSite 类别和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686941/

相关文章:

java - Oracle 应用服务器上每个 Java VM 的单独 GC 日志文件

java - 多核环境中原子操作的线程安全

java - 使用线程执行多项操作,而无需为每项操作使用线程

delphi - E2010 不兼容类型

delphi - 不区分大小写的 Bob Jenkins 哈希?

java - Eclipse Tomcat 8 服务器上的 Spring MVC 应用程序输出过多的 DEBUG 消息

JavaFX线程与Java线程同步

c++ - 显示 QDialog 框时的 QT 线程问题

Delphi XE8 简单 DataSnap 客户端和服务器应用程序中的未知内存泄漏

sql - 使用触发器记录对数据库表的更改