`
liyebing
  • 浏览: 58043 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多并发情况下日志信息中如何区分不同线程(客户端)调用

 
阅读更多

      在企业开发中,常常会遇到这样的需求:通过一个唯一标识将一个线程(或者一个客户端)从开始进入系统一直到退出该系统完整的系统调用路径产生的所有日志串联起来。

      这样做带来的一个明显的好处就是:通过命令 grep  唯一标识  *.log 可以获取该线程(客户端)本次调用的所有日志。这对于排查系统问题是有莫大好处的。下面列举两种解决方案:

 

   在处理之前,必须整理出所有系统调用的入口点。比如系统A,有三个入口点,分别是通过页面访问,外部系统调用A系统发布出去的WS服务,A系统接收外部系统发送的消息。

 

 方案一:通过埋点或者拦截器在系统入口方法调用之前设置本地线程变量的值,一般是当前系统时间,比如:

             org.apache.log4j.NDC.push(System.nanoTime());

             在线程(客户端调用)退出的时候,调用:

             org.apache.log4j.NDC.remove();

 

             注意配置文件中的布局格式中一定要加上%x

             可参考:http://blog.csdn.net/NEU_20063508/article/details/3872226

 

方案二:通过埋点或者拦截器在系统入口方法调用之前设置本地线程变量的值,一般是当前系统时间。和方案一不同,这里的当前时间是放在ThreadLocal变量中的。比如:

  private static ThreadLocal<Long> timeKey=new ThreadLocal<Long>();

  timeKey.set(System.nanoTime());

 

  然后对Log日志输出器做一个封装,重写所有的日志输出方法,使得每个日志输出的后面都加上timeKey.get();方法

 

  最后在线程调用退出的时候,清空资源:

 timeKey.set(null);

 

分享到:
评论

相关推荐

    模拟摄像头libuv支持多线程并发

    在IT行业中,模拟摄像头与多线程并发处理是两个重要的技术领域,特别是在视频通信和网络编程中。本文将深入探讨“模拟摄像头libuv支持多线程并发”这一主题,结合“模拟IPC”这一标签,以及文件名称“IpcSimulate”...

    Delphi SIP客户端调用程序

    总的来说,开发Delphi SIP客户端调用程序是一项涉及通信协议、组件编程、多线程技术和实时系统设计等多个领域的复杂任务。通过理解和掌握SIP协议,合理利用如MonitorAgent这样的组件,以及深入实践,我们可以构建出...

    Java多线程端口快速扫描

    Java多线程端口扫描是网络管理与安全领域中常用的一种技术,主要用于检测网络设备上哪些端口处于开放状态,从而分析网络的安全性或者优化网络配置。本程序通过利用Java的多线程特性,提高了扫描速度,使得在短时间内...

    httpclient妙用一 httpclient作为客户端调用webservice

    但在高并发的环境下,阻塞模型可能会导致线程资源的大量消耗。 异常处理是HTTP客户端必须处理的另一个重要问题。HTTP协议处理器提供了对协议异常的捕获和处理机制,使得在发生协议错误时能够进行相应的处理。 异步...

    创建多线程线程同步

    在编程领域,多线程是实现并发执行任务的重要方式,特别是在多核处理器系统中,它能充分利用硬件资源,提高程序的执行效率。本主题将深入探讨如何在编程中创建多线程以及如何实现线程同步,特别关注CEVENT对象在...

    C# 多线程socket 实例

    - 为每个新连接创建一个独立的线程,以便在不影响其他连接的情况下处理该客户端的通信。 - 在线程中,可以使用Socket的Receive和Send方法读取和发送数据。 - 使用线程同步机制(如Mutex、Semaphore或Monitor)...

    多线程访问网页测试

    在IT行业中,多线程是一种常见的编程技术,特别是在C#这样的多任务编程环境中。这个名为“多线程访问网页测试”的...通过学习和实践此类项目,开发者可以提升在高并发场景下的编程能力,更好地理解和应用多线程编程。

    在Linux下的网络编程demo,C语言实现了多进程和多线程的并发服务器案例,client-server demo.zip

    这个"client-server demo"实例将演示如何在Linux下使用C语言构建一个支持多进程或多线程并发处理客户端连接的服务器,这有助于理解网络编程的核心概念和实践技巧。通过对源代码的分析和学习,可以进一步提升对Linux...

    java 多线程软件

    从给定的文件信息来看,我们正在探讨的主题是“Java多线程软件”,具体到一个基于Java的FTP(File Transfer Protocol)服务器与客户端的应用。这个应用利用了多线程技术来处理并发的文件传输请求,这在现代网络环境...

    linux-uboot和套结字多线程

    2. **线程安全**:确保使用的库函数在多线程环境下是安全的,避免因非线程安全的函数调用导致的问题。 3. **信号量**:当需要控制线程间的协作,比如限制同时访问套接字的线程数量时,可以使用信号量。 4. **条件...

    linux下基于socket的多线程编程

    在Linux操作系统中,基于Socket的多线程编程是网络编程中的一个重要领域,它结合了Socket通信和多线程技术,可以实现高效的并发服务。Socket是网络通信的基本接口,TCP(Transmission Control Protocol)协议则提供...

    springMVC+多线程+kafka的 demo基于maven

    在本项目中,我们探索了如何将Spring MVC框架与多线程、线程池和Apache Kafka集成,构建一个高效的数据处理系统。以下是关于这些技术及其整合的详细知识点: 1. **Spring MVC**: - Spring MVC是Spring框架的一个...

    互联网编程二-多线程线程池TCP服务器端程序设计

    日志记录的内容和日志存储方式可自定(比如可以记录客户端的连接时间、客户端IP等,日志存储为.TXT或.log文件等),分别在1和2的服务器程序中调用该日志程序模块,使多线程TCP服务器和线程池TCP服务器都具备日志功能...

    多线程Web服务器的设计与实现

    在Web服务器中,多线程技术用于处理并发请求,使得服务器能够同时服务于多个客户端,提高资源利用率和响应效率。Java语言提供了丰富的多线程API,如`Thread`类和`Runnable`接口,使得创建和管理线程变得简单。 2. *...

    解决python线程卡死的问题

    客户端采用了多进程的方式处理任务队列中的数据,并通过`Thrift`调用服务端接口。当服务端进程数量不足时,客户端可能出现卡死的情况。 ```python docQue = queues.Queue(maxsize=1000) pCount = 15 class ...

    QT TCP多线程编程例子

    在这个例子中,我们将探讨如何在QT框架下利用TCP协议进行多线程通信,以实现客户端从服务器获取不同数据的功能。以下是对这个主题的详细解释: 首先,QT(Qt)是一个跨平台的应用程序开发框架,它支持多种编程语言...

    wcf在dotnet智能客户端开发中的应用

    WCF支持服务版本控制,允许在不中断现有客户端的情况下升级服务。同时,WCF还与其他平台和服务(如SOAP、REST、WS-*标准)具有良好互操作性,扩大了其应用范围。 综上所述,WCF在.NET智能客户端开发中扮演着重要...

    delphi7多线程下载文件

    在Delphi7中,开发多线程下载文件的应用程序是一项技术含量较高的任务,涉及到并发处理、网络通信以及文件I/O等多个方面。在这个场景下,我们通常会利用Indy10库,尤其是其中的IdHTTP组件来实现网络请求,再结合多...

    unix的select实现服务端与多客户端通讯

    在Unix操作系统中,实现服务端与多个客户端的通信是一个常见的任务,特别是在开发网络应用程序时。这里我们将探讨如何利用`select`函数以及Unix提供的其他进程间通信(IPC)机制,如信号量、消息队列和共享内存,来...

    基于tesseract的多线程OCR服务器的JAVA实现

    在本项目中,Java被选为实现多线程OCR服务器的语言,因为它提供了丰富的多线程API,如`java.util.concurrent`包,可以方便地创建和管理并发任务。 【项目结构与实现】 “HeliosServer”可能包含以下组件: 1. **...

Global site tag (gtag.js) - Google Analytics