参考资料:http://nudtgk2000.iteye.com/blog/1716379

首先,在http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip下载log4j包

然后,在原工程里导入包

按照参考资料的提示,一步步来

首先,新建package appender, new 一个class ThreadSeperateDailyRollingFileAppender,该class继承自DailyRollingFileAppender  ,下面是源代码

  1. package appender;
  2. import java.io.File;
  3. import java.io.IOException;
  4.  
  5. import org.apache.log4j.DailyRollingFileAppender;
  6. import org.apache.log4j.Layout;
  7.  
  8. /**
  9. * @author Kevin Kwok
  10. */
  11. public class ThreadSeperateDailyRollingFileAppender extends
  12. DailyRollingFileAppender
  13. {
  14. public ThreadSeperateDailyRollingFileAppender() {}
  15.  
  16. public ThreadSeperateDailyRollingFileAppender(Layout layout, String datePattern) throws IOException
  17. {
  18. // 改动只有这点:以线程名命名日志文件
  19. super(layout,
  20. "log" + File.separator + Thread.currentThread().getName(),
  21. datePattern);
  22. }
  23. }

然后,新建一个package threadlogger, new 一个class ThreadLogger, 下面是源代码

  1. package threadlogger;
  2.  
  3. import java.io.IOException;
  4.  
  5. import org.apache.log4j.ConsoleAppender;
  6. import org.apache.log4j.Level;
  7. import org.apache.log4j.Logger;
  8. import org.apache.log4j.PatternLayout;
  9.  
  10. import appender.ThreadSeperateDailyRollingFileAppender;
  11.  
  12. /**
  13. * @author Kevin Kwok
  14. */
  15. public class ThreadLogger
  16. {
  17. ThreadLogger() {};
  18.  
  19. public static Logger getLogger()
  20. {
  21. Logger logger = null;
  22. // 创建一个Logger实例, 就以线程名命名
  23. logger = Logger.getLogger(Thread.currentThread().getName());
  24.  
  25. PatternLayout layout = new PatternLayout("%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss,SSS}] %l%t: %m%n");
  26.  
  27. // 控制台输出
  28. ConsoleAppender concoleAppender = new ConsoleAppender(layout, "System.out");
  29.  
  30. // 文件输出
  31. ThreadSeperateDailyRollingFileAppender R = null;
  32. try
  33. {
  34. R = new ThreadSeperateDailyRollingFileAppender(layout, "'.'yyyy-MM-dd'.log'");
  35. }
  36. catch (IOException e)
  37. {
  38. e.printStackTrace();
  39. }
  40. // 参数配置, 因为没有找到仅靠配置文件的办法, 只好放在这里设
  41. R.setAppend(false);
  42. R.setImmediateFlush(true);
  43. R.setThreshold(Level.WARN);
  44.  
  45. // 绑定到Logger
  46. logger.setLevel(Level.DEBUG);
  47. logger.addAppender(concoleAppender);
  48. logger.addAppender(R);
  49.  
  50. return logger;
  51. }
  52.  
  53. }

最后,在原来建立线程的类里调用刚刚写的函数就可以了:

导入

import org.apache.log4j.Logger;
import threadlogger.ThreadLogger;
import testlog.ThreadBody;

之后,最关键的就是对run函数的改造,因为独立的Logger实例要在run方法内实现,下面是源代码

  1. private Socket client;
  2. public LocalSocketServer(Socket c)
  3. {
  4. this.client=c;
  5.  
  6. }
  7. public void run()
  8. {
  9. try{
  10. BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
  11. PrintWriter out=new PrintWriter(client.getOutputStream());
  12. String str=in.readLine();
  13. System.out.println(str);
  14. out.println(indexSearch(str));
  15. out.flush();
  16. client.close();
  17. Logger logger = ThreadLogger.getLogger();
  18.  
  19. logger.warn(Thread.currentThread().getName() + " started!");
  20.  
  21. logger.debug("this is debug");
  22. logger.info("this is info");
  23. logger.warn("this is warn");
  24. logger.error("this is error");
  25.  
  26. logger.warn(Thread.currentThread().getName() + " finished!");
  27. }catch(IOException ex){
  28.  
  29. }finally{
  30.  
  31. }
  32. }
  33.  
  34. static Logger logger = ThreadLogger.getLogger();
  35.  
  36. public static void main(String[] args) throws IOException
  37. {
  38. logger.warn(LocalSocketServer.class + " started!");
  39. ThreadBody threadBody = new ThreadBody();
  40. ServerSocket server=new ServerSocket(5678);
  41. while (true)
  42. {
  43. LocalSocketServer lss=new LocalSocketServer(server.accept());
  44. lss.start();
  45. logger.debug("this is debug");
  46. logger.info("this is info");
  47. logger.warn("this is warn");
  48. logger.error("this is error");
  49. }
  50. }
  51. }

最后的结果就是,在工程里的log文件夹下,出现了以各自线程名为名的日志文件,记录了各自线程的信息。

【lucene系列学习四】log4j日志文件实现多线程的测试的更多相关文章

  1. Log4j 输出的日志中时间比系统时间少了8小时的解决方法,log4j日志文件重复输出

    1. 第一个问题:时间少了8小时 Log4j 输出的日志中,时间比系统时间少了8小时,但是 eclipse 控制台输出的日志的时间却是对的. log4j配置如下: #all logger output ...

  2. Zookeeper(四))持久化日志文件

    Zookeeper(四))持久化日志文件 持久化用途 存储两种文件 snapshot:内存快照 log:事务日志,类似MySQL的binlog,存储数据节点的操作日志 问题 序列化的本质其实就是将原数 ...

  3. log4j 日志文件(Day_19)

    详细  :   https://www.cnblogs.com/liaojie970/p/7634838.html log4j  日志文件 1 log4j.rootLogger=debug,CONSO ...

  4. [ log4j ]-日志文件的使用

    在java文件中通过 log4j 输出日志信息 1,先引入 log4j-xx.x.jar 包 2,新建一个日志类 PrintLog4j.java: package com.stu.log4j; imp ...

  5. log4j日志文件 log4j.xml log4j.properties配置

    1,导入log4j  jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...

  6. 记一次log4j日志文件输出错误的解决

    log4j错误信息:log4j:ERROR Failed to rename [D:/logs/wmts_] to [D:/logs/wmts_2015-12-21.log ]. 起因:部门网站使用B ...

  7. log4j日志文件路径设置

    假设有如下标准化的目录结构: $HOME |-- log |-- conf |-- bin |-- lib |-- data jar包放在lib目录,启动脚本放在bin目录,日志文件放在log目录,配 ...

  8. java log4j 日志文件

    开发中经常会用到log日志文件,根据业务需要可能不产生很大日志文件给维护和[排错带来了麻烦.所以我们希望能够每天或每个月产生一个日志文件,这样文件不至于过大. 或者根据日志文件大小来判断,超过规定大小 ...

  9. 记一次log4j日志文件小事故

    最近散仙在做公司的一个跟搜索有关的数据分析项目,主要就是统计搜索的转化率,目的主要有以下几个: (1)通过数据分析挖掘,找出搜索业务在整个平台系统里的GMV里所占份额 (2)给公司的搜索算法调优,提供 ...

随机推荐

  1. 将两个列不同的DataTable合并成一个新的DataTable

    /// <summary>         /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable         /// </summary> ...

  2. UML软件方法大纲

    利用周末的时间读了潘加宇的<软件方法(上)>,希望梳理清楚UML的知识脉络: 工作流 子流程 内容 备注 建模和uml   利润=需求-设计   愿景   缺乏清晰.共享的愿景往往是项目失 ...

  3. (28)初识struts框架

    案例剖析中介绍了一个自己写的mystruts框架,这里开始简单的认识struts框架. 1.先看一个简单的struts开发的例子来熟悉一下流程 Struts就是基于mvc模式的框架! (struts其 ...

  4. Halloc内存分配器

    MAX_NSBS 8192:默认的最大superblocks数量 SB_SET_SZ(MAX_NSBS / WORD_SZ):superblock set的大小,每个set32个superblcoks ...

  5. flex中过滤掉字符串的空格

    1.先引入import mx.utils.StringUtil;这个包, 在使用StringUtil.trim(); 如:if(StringUtil.trim(this.d1.3.text) ==&q ...

  6. English Learn

    English Learn 一直决定好好学习英语.越来越觉得英语的重要性,解决日常问题.学习新东西.使用google时都经常碰到英文.所以觉得在blog上记录些学习英语的文章,也算是对自己的一种监督. ...

  7. 【Java基础 】Java7 NIO Files,Path 操作文件

    从Java1.0到1.3,我们在开发需要I/O支持的应用时,要面临以下问题: 没有数据缓冲区或通道的概念,开发人员要编程处理很多底层细节 I/O操作会被阻塞,扩展能力有限 所支持的字符集编码有限,需要 ...

  8. JSTL标签用法 详解(转)

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  9. Ubuntu下php网站运行环境搭建

    第一步:查看是否安装lamp相关软件: dpkg -s 软件名称,比如php.mysql.apache. dpkg-query -l 软件名称 要列出你系统中安装的所有包,输入下面的命令:dpkg - ...

  10. 持续集成:TestNG中case之间的关系

    持续集成:TestNG中case之间的关系   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq: ...