`
liyebing
  • 浏览: 56745 次
  • 性别: 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);

 

分享到:
评论

相关推荐

    Java并发编程实战

    书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高...

    StressMark压力测试软件

    或者调用 StressCase 类的 LogEvent() 方法记录系统日志(仅在 Windows NT/2000 下有效,日志信息记录在操作系统的应用程序日志中,可以使用事件查看器阅读)。 有关 StressCase 类的各成员变量及方法的使用的详细...

    IIS6.0 IIS,互联网信息服务

    三、在Windows XP Home版本中添加IIS的方法一般情况下按照“一”的方法只适用于Windows XP的专业版本,而对于家庭版,如今已有了破解方法:步骤1 首先我们需要准备一张Windows 2000的安装光盘,假设你的Windows XP...

    mysql数据库my.cnf配置文件

    # MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,...

    C/C++笔试题(附答案,华为面试题系列)

    答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两 种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序 中实现的线程,其不依赖于操作系统核心,应用...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    java开源包1

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    Linux高性能服务器编程

    16.2.1 procsysfs目录下的部分文件 16.2.2 procsysnet目录下的部分文件 16.3 gdb调试 16.3.1 用gdb调试多进程程序 16.3.2 用gdb调试多线程程序 16.4 压力测试 第17章 系统监测工具 17.1 tcpdump 17.2 lsof ...

    python cookbook(第3版)

    14.3 在单元测试中测试异常情况 14.4 将测试输出用日志记录到文件中 14.5 忽略或者期望测试失败 14.6 处理多个异常 14.7 捕获所有异常 14.8 创建自定义异常 14.9 捕获异常后抛出另外的异常 14.10 重新抛出...

    Python示例-从基础到高手PDF

    第 21 章 服务端 socket 开发之多线程和 gevent 框架并发测试[python 语言] 第 22 章 利用 pypy 提高 python 脚本的执行速度及测试性能 第 23 章 python 实现 select 和 epoll 模型 socket 网络编程 第 24 章 对 ...

    Loadrunner报错日志

    那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的sql语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中并发500用户和600用户时曾...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。...

    JAVA上百实例源码以及开源项目

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    java开源包11

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包2

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包3

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包6

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包5

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包10

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包4

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

Global site tag (gtag.js) - Google Analytics