2012-07-30 38 views

回答

2

没有自动的方式将这些信息从客户端传输到服务器。

听起来你想要/需要某种在客户端(每线程?)设置的对象Context,并作为方法参数传递给RMI服务器。这Context对象可能包含不只是线程的名称,但像调用进程或许还包括其他信息PID等

然后你不得不使用Context对象设置线程的名称等。因此通过Thread.setName()一旦它已经穿过电线。去转发,您可以设置特定的上下文信息在你的日志框架使用这个(例如,使用Log4j的nested diagnostic contexts

这进一步自动化应用方面的留作进一步练习读者:-)

+0

我做了很多关于log4j和mdc/ndc的研究,但不幸的是它无法检测到分布式线程。我的问题的关键是:如何为每个请求设置一个唯一的名称,将其传递给控制流,然后使用log4j将该名称添加到日志中,最终将它们聚集在一起并按请求名分组。 – alicjasalamon 2012-07-30 08:16:33

+0

是的。无论您选择何种解决方案,您都会*在服务器(接收)方面做一些工作。你*可能*使用方面(AspectJ或类似的)自动化,但这是另一个问题! – 2012-07-30 08:28:53

+0

其实我也研究过关于AspectJ的:)我的想法是在'@ around'方面添加日志记录,因为我需要测量执行时间。那么是否可以使用方面来设置线程名称(连接到一个请求的所有线程的名称)?如何传递这个名字? – alicjasalamon 2012-07-30 08:41:51

0

Thread类有一个静态方法到setName(String)。如果你可以有你的线索,无论他们来自哪里,运行该方法,你应该很好去。 These guys与Tomcat相关的线程有类似的问题。

+0

感谢您的链接。我的问题更多地是关于在JVM中传递名称而不在对象中添加字段或者与RMI连接的每种方法的参数,但我需要更仔细地研究此链接。 – alicjasalamon 2012-07-30 08:12:06

+0

这不是一个静态方法。明显。 – EJP 2012-07-30 22:23:53