参考资料: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  ,下面是源代码

package appender;
import java.io.File;
import java.io.IOException; import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Layout; /**
* @author Kevin Kwok
*/
public class ThreadSeperateDailyRollingFileAppender extends
DailyRollingFileAppender
{
public ThreadSeperateDailyRollingFileAppender() {} public ThreadSeperateDailyRollingFileAppender(Layout layout, String datePattern) throws IOException
{
// 改动只有这点:以线程名命名日志文件
super(layout,
"log" + File.separator + Thread.currentThread().getName(),
datePattern);
}
}

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

package threadlogger;

import java.io.IOException;  

import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout; import appender.ThreadSeperateDailyRollingFileAppender; /**
* @author Kevin Kwok
*/
public class ThreadLogger
{
ThreadLogger() {}; public static Logger getLogger()
{
Logger logger = null;
// 创建一个Logger实例, 就以线程名命名
logger = Logger.getLogger(Thread.currentThread().getName()); PatternLayout layout = new PatternLayout("%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss,SSS}] %l%t: %m%n"); // 控制台输出
ConsoleAppender concoleAppender = new ConsoleAppender(layout, "System.out"); // 文件输出
ThreadSeperateDailyRollingFileAppender R = null;
try
{
R = new ThreadSeperateDailyRollingFileAppender(layout, "'.'yyyy-MM-dd'.log'");
}
catch (IOException e)
{
e.printStackTrace();
}
// 参数配置, 因为没有找到仅靠配置文件的办法, 只好放在这里设
R.setAppend(false);
R.setImmediateFlush(true);
R.setThreshold(Level.WARN); // 绑定到Logger
logger.setLevel(Level.DEBUG);
logger.addAppender(concoleAppender);
logger.addAppender(R); return logger;
} }

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

导入

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

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

private  Socket client;
public LocalSocketServer(Socket c)
{
this.client=c; }
public void run()
{
try{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
String str=in.readLine();
System.out.println(str);
out.println(indexSearch(str));
out.flush();
client.close();
Logger logger = ThreadLogger.getLogger(); logger.warn(Thread.currentThread().getName() + " started!"); logger.debug("this is debug");
logger.info("this is info");
logger.warn("this is warn");
logger.error("this is error"); logger.warn(Thread.currentThread().getName() + " finished!");
}catch(IOException ex){ }finally{ }
} static Logger logger = ThreadLogger.getLogger(); public static void main(String[] args) throws IOException
{
logger.warn(LocalSocketServer.class + " started!");
ThreadBody threadBody = new ThreadBody();
ServerSocket server=new ServerSocket(5678);
while (true)
{
LocalSocketServer lss=new LocalSocketServer(server.accept());
lss.start();
logger.debug("this is debug");
logger.info("this is info");
logger.warn("this is warn");
logger.error("this is error");
}
}
}

最后的结果就是,在工程里的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. 用js控制css属性

    在用js控制css属性时,行内css属性可以任意控制,但若是在<style></style>中写的css属性,均不能用alert读取,但是赋值却有几种现象, 第一种:无法读取, ...

  2. JVM中GC浅解:垃圾回收的了解

    1.为什么要有GC 没有GC的世界,我们需要手动进行内存管理,但是内存管理是纯技术活,又容易出错.但是我们写码的目的是为了解决业务问题,所以可以把这种纯技术活自动化,当然自动化也是有代价的. 2.垃圾 ...

  3. 英伟达CUVID硬解,并通过FFmpeg读取文件

    虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...

  4. J2那几个E和Web基础

    收到PHP童鞋的反馈: 我觉得不用讲太基础的语法,基础语法大家自己去看,主要讲讲java web开发的一个流程,从开始写代码,到编译,发布,上线,回滚整个流程 大体上的环节,以及需要用到哪些工具 具体 ...

  5. Oracle14~23

    14.查询所有学生的Sname.Cno和Degree列. 15.查询所有学生的Sno.Cname和Degree列. 16.查询所有学生的Sname.Cname和Degree列. 17. 查询“9503 ...

  6. PHPCMSV9上线方法及文件权限设置

    上线步骤: a.替换代码和数据库文件内的域名b.修改cache/configs/database.php中的数据库密码c.修改cache/configs/system.php文件中的网站路径变量 'w ...

  7. First Article

    Hello World 愚人节的这天,我在我师傅的引导下,踏上了博客园这条不归路...... 先做下自我介绍,我姓李,木子李,因为本人比较中二,所以大家就叫我李中二吧! 工作是前端开发,目前正在深圳一 ...

  8. WebService基础学习(三)—CXF

    一.什么是CXF?      Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.Apache ...

  9. Java基础学习(二)—数组

    一.数组的概念 定义: 数组是存储同一种数据类型的多个元素的集合. 数组既可以存储基本数据类型,也可以存储引用数据类型. 格式: 格式1: 数据类型[] 数组名; 格式2: 数据类型 数组名[]; 这 ...

  10. JS学习中遇到的一些题目

    1.找出所有的水仙花数: 水仙花数例如:153 的特点: 1^3+5^3+3^=153 而且水仙花数只会是三位数,所以可以利用循环的方式来解决问题,循环条件可以设为: var i = 1;i < ...