转载自: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多线程调试的相关代码介绍。

最新文章

  1. XMPP iOS客户端实现一:服务器
  2. jQuery5~7章笔记 和 1~3章的复习笔记
  3. Leetcode: Design Phone Directory
  4. [整理]Centos6.5 + hadoop2.6.4环境搭建
  5. 实现View的移动的方法总结
  6. 移动web开发和移动app开发的区分
  7. 开始使用Pyhton
  8. 不用Invoke就等用 Control.CheckForIllegalCrossThreadCalls = false;
  9. Android include的使用
  10. HTML 表格的书写方式:
  11. C++11老关键字的新含义(auto, using,extern)
  12. 机器学习笔记——K-means
  13. easyui最小化后停留在页面的右下角
  14. python笔记之编程风格大比拼
  15. 莱特币ltc在linux下的多种挖矿方案详解
  16. KnockoutJS-模板绑定
  17. debian安装mongoDB
  18. 理解ActivityManagerService
  19. James Munkres Topology: Sec 37 Exer 1
  20. 类对象序列化为json串,json串反序列化为类对象

热门文章

  1. R语言学习笔记(二): 类与泛型函数
  2. 【转】使用git提交项目到码云
  3. Git 查看远程分支、本地分支、删除本地分支及远程分支
  4. php长整型完整输出
  5. VS2010安装MVC3出错
  6. js数字格式化千分位格式
  7. Tuxedo 介绍与安装
  8. 05-Mysql数据库----补充内容
  9. LeetCode 82 ——删除排序链表中的重复元素 II
  10. Ubuntu 和 Windows 之间进行远程访问和文件互传