Doj*_*ojo 6 java multithreading thread-safety threadpool
我有一个使用套接字的多线程客户端服务器应用程序.找到新连接后,使用新的Executors线程池将进一步执行转移到新线程.
我想在该客户端的所有日志记录语句中记录客户端ID.问题是我不想修改方法签名只是为了传递客户端ID.
我想到的解决方案是:
第一个应该工作.但我喜欢第二种选择,因为a.我可以从调试器中找到客户端ID.记录器库可以配置为显示线程名称.因此,日志语句不需要进行任何更改,它也适用于库中的记录器.
除了javadoc中提到的那些之外,使用thread.setName()的注意事项是什么?它如何影响性能?调用thread.setName()的峰值频率约为每秒200次,平均值约为每秒0.3次.
如果您使用 Log4j,则有一种特定的机制可以处理此类日志记录模式,分为两个类org.apache.log4j.NDC和org.apache.log4j.MDC(“嵌套和映射的诊断上下文”)。
浏览一下NDC 与 MDC - 我应该使用哪一个?查看哪一个最适合您的特定情况。
这里有另一个链接,更详细地描述了 MDC 的使用:使用 log4j 构建灵活的日志 - O'Reilly Media
请注意,MDC/NDC 使用的底层存储机制(我相信)是 ThreadLocal。
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |