【lucene系列学习四】log4j日志文件实现多线程的测试
参考资料: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日志文件实现多线程的测试的更多相关文章
- Log4j 输出的日志中时间比系统时间少了8小时的解决方法,log4j日志文件重复输出
1. 第一个问题:时间少了8小时 Log4j 输出的日志中,时间比系统时间少了8小时,但是 eclipse 控制台输出的日志的时间却是对的. log4j配置如下: #all logger output ...
- Zookeeper(四))持久化日志文件
Zookeeper(四))持久化日志文件 持久化用途 存储两种文件 snapshot:内存快照 log:事务日志,类似MySQL的binlog,存储数据节点的操作日志 问题 序列化的本质其实就是将原数 ...
- log4j 日志文件(Day_19)
详细 : https://www.cnblogs.com/liaojie970/p/7634838.html log4j 日志文件 1 log4j.rootLogger=debug,CONSO ...
- [ log4j ]-日志文件的使用
在java文件中通过 log4j 输出日志信息 1,先引入 log4j-xx.x.jar 包 2,新建一个日志类 PrintLog4j.java: package com.stu.log4j; imp ...
- log4j日志文件 log4j.xml log4j.properties配置
1,导入log4j jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...
- 记一次log4j日志文件输出错误的解决
log4j错误信息:log4j:ERROR Failed to rename [D:/logs/wmts_] to [D:/logs/wmts_2015-12-21.log ]. 起因:部门网站使用B ...
- log4j日志文件路径设置
假设有如下标准化的目录结构: $HOME |-- log |-- conf |-- bin |-- lib |-- data jar包放在lib目录,启动脚本放在bin目录,日志文件放在log目录,配 ...
- java log4j 日志文件
开发中经常会用到log日志文件,根据业务需要可能不产生很大日志文件给维护和[排错带来了麻烦.所以我们希望能够每天或每个月产生一个日志文件,这样文件不至于过大. 或者根据日志文件大小来判断,超过规定大小 ...
- 记一次log4j日志文件小事故
最近散仙在做公司的一个跟搜索有关的数据分析项目,主要就是统计搜索的转化率,目的主要有以下几个: (1)通过数据分析挖掘,找出搜索业务在整个平台系统里的GMV里所占份额 (2)给公司的搜索算法调优,提供 ...
随机推荐
- webots自学笔记(五)使用物理插件ODE建立铰链
原创文章,来自"博客园,_阿龙clliu" http://www.cnblogs.com/clliu/,转载请注明原文章出处. 在一些三维制图软件或仿真软件里,都有运动副的概念,w ...
- [UWP]了解模板化控件(2):模仿ContentControl
ContentControl是最简单的TemplatedControl,而且它在UWP出场频率很高.ContentControl和Panel是VisualTree的基础,可以说几乎所有VisualTr ...
- iOS开发之URLSession
1.概述 n NSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的. n 当程序在前台时,NSURLSession与NSURLConnection大部分可以互 ...
- git 远程仓库管理
要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库.远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写.同他人协作开发某 个项目时,需要管理这些远程仓库 ...
- Python之路-正则表达式
作业一:整理正则表达式博客 正则表通常被用来检索.替换那些符合某个模式(规则)的文本,为了提取对自己有用的信息,由命令解释执行:而通配符和命令是同一级别,为了提示处理效率,直接由shell解释执行. ...
- 使用EPPlus读写xlsx文件
朋友有个需求,想对N张excel表做过滤和合并的处理,拜托我写个小程序.因为用户的背景是非专业用户,因此最好的选择是写个GUI程序,再加上读写excel的需求,所以我的首选就是C#的WinForm了. ...
- PT20150801隆重开班
PT20150801隆重开班 伴随着秋天的的脚步,带着对梦想的憧憬,POPTEST1508期学员步入正式学习阶段:POPTEST的课程内容吸收了互联网公司先进技术的特点,同时坚持深入浅出的教育特点,完 ...
- 手机自动化测试:Appium源码分析之跟踪代码分析五
手机自动化测试:Appium源码分析之跟踪代码分析五 手机自动化测试是未来很重要的测试技术,作为一名测试人员应该熟练掌握,POPTEST举行手机自动化测试的课程,希望可以训练出优秀的手机测试开发工 ...
- Framework7初始化
/** * Framework7初始化 * 需引用jQuery */ /*---------------------------函数---------------------------*/ /** ...
- 细细探究MySQL Group Replicaiton — 配置维护故障处理全集
本文主要描述 MySQL Group Replication的简易原理.搭建过程以及故障维护管理内容.由于是新技术,未在生产环境使用过,本文均是虚拟机测试,可能存在考虑不周跟思路有误 ...