【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)给公司的搜索算法调优,提供 ...
随机推荐
- 将两个列不同的DataTable合并成一个新的DataTable
/// <summary> /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable /// </summary> ...
- UML软件方法大纲
利用周末的时间读了潘加宇的<软件方法(上)>,希望梳理清楚UML的知识脉络: 工作流 子流程 内容 备注 建模和uml 利润=需求-设计 愿景 缺乏清晰.共享的愿景往往是项目失 ...
- (28)初识struts框架
案例剖析中介绍了一个自己写的mystruts框架,这里开始简单的认识struts框架. 1.先看一个简单的struts开发的例子来熟悉一下流程 Struts就是基于mvc模式的框架! (struts其 ...
- Halloc内存分配器
MAX_NSBS 8192:默认的最大superblocks数量 SB_SET_SZ(MAX_NSBS / WORD_SZ):superblock set的大小,每个set32个superblcoks ...
- flex中过滤掉字符串的空格
1.先引入import mx.utils.StringUtil;这个包, 在使用StringUtil.trim(); 如:if(StringUtil.trim(this.d1.3.text) ==&q ...
- English Learn
English Learn 一直决定好好学习英语.越来越觉得英语的重要性,解决日常问题.学习新东西.使用google时都经常碰到英文.所以觉得在blog上记录些学习英语的文章,也算是对自己的一种监督. ...
- 【Java基础 】Java7 NIO Files,Path 操作文件
从Java1.0到1.3,我们在开发需要I/O支持的应用时,要面临以下问题: 没有数据缓冲区或通道的概念,开发人员要编程处理很多底层细节 I/O操作会被阻塞,扩展能力有限 所支持的字符集编码有限,需要 ...
- JSTL标签用法 详解(转)
JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...
- Ubuntu下php网站运行环境搭建
第一步:查看是否安装lamp相关软件: dpkg -s 软件名称,比如php.mysql.apache. dpkg-query -l 软件名称 要列出你系统中安装的所有包,输入下面的命令:dpkg - ...
- 持续集成:TestNG中case之间的关系
持续集成:TestNG中case之间的关系 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq: ...