转载自:http://developer.51cto.com/art/201003/189078.htm

Java多线程调试是很繁琐的,但是还是需要我们不断进行相关的学习。下面我们就来看看在Java多线程调试中需要我们注意的相关关键点。为了查看中间结果一般采用将信息输出到System.out中。

这样就产生了一个问题:很多个线程的输出信息都简单的输出到控制台上,当我们要查看每个线程自己处理的中间信息时很麻烦。最近在一个实践项目中,使用了Log4j让每个线程输出到自己的log文件中,这样在调试的时候很方便。

1. 配置log4j.properties文件

  1. lg4j.rootLogger=DEBUG,stdout
  2. # stdout is set to be a ConsoleAppender.
  3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  4. log4j.appender.stdout.layout=org.apache.log4j.
    PatternLayout
  5. log4j.appender.stdout.layout.ConversionPattern= 
    [%t] (%F,%L) - %m%n
  6. log4j.additivity.log4j.stdout=false
  7. # com.se.crawler.Crawler Appender.
  8. log4j.logger.com.se.Crawler.Crawler=DEBUG,Crawler
  9. log4j.appender.Crawler=org.apache.log4j.FileAppender
  10. log4j.appender.Crawler.File=Crawler.log
  11. log4j.appender.Crawler.Append=false
  12. log4j.appender.Crawler.layout=org.apache.log4j.PatternLayout
  13. log4j.appender.Crawler.layout.ConversionPattern=%m%n
  14. log4j.additivity.com.se.crawler.Crawler=false
  15. # com.se.crawler.LinkProcessor Appender.
  16. log4j.logger.com.se.crawler.LinkProcessor=DEBUG,Link
    Processor
  17. log4j.appender.LinkProcessor=org.apache.log4j.FileAppender
  18. log4j.appender.LinkProcessor.File=LinkProcessor.log
  19. log4j.appender.LinkProcessor.Append=false
  20. log4j.appender.LinkProcessor.layout=org.apache.log4j.
    PatternLayout
  21. log4j.appender.LinkProcessor.layout.ConversionPattern=%m%n
  22. log4j.additivity.com.se.crawler.LinkProcessor=false

说明:rootLogger为控制台,Crawler,LinkProcessor为两个线程,分别输出到Crawler.log和LinkProcessor.log文件中。

2. 在线程中添加日志代码

  1. ……
  2. import org.apache.log4j.Logger;
  3. ……
  4. public class Crawler extends Thread {
  5. ……
  6. protected static Logger logger = Logger.
    getLogger(Crawler.class);
  7. ……
  8. logger.debug(msg);
  9. ……
  10. }

这样,在线程运行的时候会自动产生两个日志文件Crawler.log和LinkProcessor.log,并将中间结果输出到各自的日志文件中。以上就是对Java多线程调试的相关代码介绍。

Java多线程调试如何完成信息输出处理的更多相关文章

  1. Java多线程——查看线程堆栈信息

    Java多线程——查看线程堆栈信息 摘要:本文主要介绍了查看线程堆栈信息的方法. 使用Thread类的getAllStackTraces()方法 方法定义 可以看到getAllStackTraces( ...

  2. java多线程调试

    1. 多线程调试 https://blog.csdn.net/bramzhu/article/details/52367052 https://www.jb51.net/article/129632. ...

  3. java日志及异常错误信息输出的问题

    1.异常信息可以层层传递,直到最后一层再输出日志也来得及 2.错误信息要在发生错误的当时就输出日志,否则到了其它层,很难得到准确的错误信息内容

  4. 【技巧】Java工程中的Debug信息分级输出接口

    也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...

  5. 【技巧】Java工程中的Debug信息分级输出接口及部署模式

    也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...

  6. 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境

    如有转载,请注明出处与本文连接,谢谢! 修改XEN的源码实现额外的功能,需要有一个调试环境来得到XEN的调试信息(有关源码编译并安装 XEN 请阅读我以前的博文:在CentOS下源码安装 Xen并搭建 ...

  7. 【转】MFC中调试过程中查看输出信息 -- 不错

    原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~ ...

  8. 痞子衡嵌入式:浅析IAR下调试信息输出机制之硬件UART外设

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之硬件UART外设. 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地 ...

  9. 痞子衡嵌入式:浅析IAR下调试信息输出机制之半主机(Semihosting)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之半主机(Semihosting). 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我 ...

随机推荐

  1. SQLServer 将日期改造成标准日期格式(如: 2016/6 ->201606)

    同事给了份Excel 数据,导到数据库之后再查出来时发现顺序不好弄.于是想从数据源中做处理. 由于数据存在,年/月 与 年/月/日 的格式不好用datetime保存,于是用varchar保存. 数据处 ...

  2. python2.7练习小例子(十三)

        13):题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.     程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成.(1)如果这个质数恰等于 ...

  3. C#的委托Delegate

    一.委托基础 1.什么是委托 委托(Delegate) 是存有对某个方法的引用的一种引用类型变量,用关键字delegate申明,实现相同返回值和参数的函数的动态调用,提供了对方法的抽象. 委托(Del ...

  4. VS中的一些标记

    1.//ToDO:此标记运行时会显示在任务列表窗口中.

  5. python中的os,shutil模块的定义以及用法

    # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Uni ...

  6. 洛谷P3958 奶酪

    题目链接 这道题貌似可以用BFS来写吧qwq. 我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可. 但是需要注意的是还有这样的一种情况:有一个大洞贯 ...

  7. 指纹识别人脸识别 iOS

    //1.判断iOS8及以后的版本 if([UIDevice currentDevice].systemVersion.doubleValue >= 8.0){ //从iPhone5S开始,出现指 ...

  8. 2,理解JVM

      一.内存管理:   1,内存结构: 栈和堆区别,栈是连续内存区,一般是2M单位,堆是不连续的链表.受限于虚拟内存,new时分配 PC寄存器.java栈.堆.方法区.本地方法区.运行常量池 java ...

  9. c++ combination by next_permutation

    #include <iostream> #include <algorithm> #include <vector> int main() { int n, r; ...

  10. kaldi基于GMM的单音素模型 训练部分

    目录 1. gmm-init-mono 模型初始化 2. compile-train-graghs 训练图初始化 3. align-equal-compiled 特征文件均匀分割 4. gmm-acc ...