log4j配置文件追加记录
2013-09-19 09:55
239 查看
package tt; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class ParaTest { /** * @param args */ public static void main(String[] args) throws Exception { /** * 目的: 比较两种方法的速率快慢 * 第一种方法: 单独一个线程串行的向日志文件中写入2048个元素 * 第二种方法: 两个线程并行,一个线程生成2048个元素后,另外一个获取该容器的锁,并写入日志文件。 */ /** * case 1: */ PThread_1 p1 = new PThread_1(); Thread t1 = new Thread(p1); long startTime = System.currentTimeMillis(); t1.start(); t1.join(); long endTime = System.currentTimeMillis(); System.out.println("The T1 running time is :" + (endTime - startTime)); /** * case 2: */ PThread_2 p2 = new PThread_2(); PThread_3 p3 = new PThread_3(); Thread t2 = new Thread(p2); Thread t3 = new Thread(p3); t2.start(); t2.join(); startTime = System.currentTimeMillis(); t3.start(); t3.join(); endTime = System.currentTimeMillis(); System.out.println("The T3 running time is :" + (endTime - startTime)); } } class PThread_1 implements Runnable { public static List<Long> lt = new ArrayList<Long>(); public static final Log pThread_1 = LogFactory.getLog(PThread_1.class); PThread_1() { } @Override public void run() { // TODO Auto-generated method stub while (lt.size() < 2048) { lt.add(System.currentTimeMillis()); } for (int i = 0; i < 2048 ; i++) { pThread_1.info(lt.get(i)); } lt.clear(); } } class PThread_2 implements Runnable { public static List<Long> lt = new ArrayList<Long>(); PThread_2() { } @Override public void run() { synchronized (lt) { while (lt.size() < 2048) { lt.add(System.currentTimeMillis()); } // lt.notifyAll(); } } } class PThread_3 implements Runnable { public static final Log pThread_3 = LogFactory.getLog(PThread_3.class); PThread_3() { } @Override public void run() { // TODO Auto-generated method stub synchronized (PThread_2.lt) { // try { // if(PThread_2.lt.size()<2048) // PThread_2.lt.wait(); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } if (PThread_2.lt.size() >= 2048) { for (int i = 0; i < PThread_2.lt.size(); i++) pThread_3.info(PThread_2.lt.get(i)); } PThread_2.lt.clear(); } } }
log4j.properties配置文件
// log4j.rootLogger = [ level ] , appenderName, appenderName, …
// appenderName是输出源的名字,它指定日志信息输出到哪个地方, 如配置控制台输出,:
log4j.rootLogger=WARN, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=(%r ms) [%t] %-5p: %c#%M %x: %m%n
注: 如果上面这段觉得多的话,至少应该有这句:
log4j.rootLogger=WARN
否则会有log4j:WARN No appenders could be found for logger
// 配置自己的pThread_1输出, Java代码中要加入public Log pThread_1 = LogFactory.getLog(PThread_3.class);
log4j.logger.tt.PThread_1=INFO,p1 //
tt.PThread_1,这里要注明包名, 为tt.PThread_1,见上面Java代码
log4j.appender.p1=org.apache.log4j.FileAppender
log4j.appender.p1.File=D://log4j/pThread_1.log
log4j.appender.p1.layout=org.apache.log4j.PatternLayout
log4j.appender.p1.layout.ConversionPattern=%d %p [%c] - %m%n
// 同上
log4j.logger.tt.PThread_3=INFO,p3
log4j.appender.p3=org.apache.log4j.FileAppender
log4j.appender.p3.File=D://log4j/pThread_3.log
log4j.appender.p3.layout=org.apache.log4j.PatternLayout
log4j.appender.p3.layout.ConversionPattern=%d %p [%c] - %m%n
相关文章推荐
- log4j学习记录 log4j配置文件的配置
- 有效Log4j按指定级别定向输出日志到指定的输出文件地址配置Threshold,log4j中如何屏蔽父logger输出源rootlogger的additivity配置,log4j向多个文件记录日志
- log4j2配置实例[按小时记录日志文件]
- Java学习-007-Log4J 日志记录配置文件详解及实例源代码
- log4j配置文件基本含义说明
- Xamarin.IOS问题记录——项目属性里IOS Bundle Signing 配置文件选项没有对应的配置文件选择
- 比较不错的log4j配置文件
- MongDB 使用 Log4j配置文件将日志写入MongDB数据库
- 配置LOG4J的日志文件位置问题
- log4j文件的配置的详细介绍
- JBOSS jboss-log4j.xml文件中配置web工程日志
- 记录几个Hibernate配置文件的作用
- Log4j配置文件被覆盖,log4j.properties无效(检查方法)
- 如何跟踪Log4j或Sl4j加载哪个配置文件进行初始化
- 使用独立的log4net.config文件配置log4net,将日志记录到Mysql数据库【原创】
- log4j配置文件和日志级别分离
- Log4J 最佳实践之全能配置文件
- 程序自定义加载log4j配置文件
- Log4j 2.0在开发中的高级使用详解—配置简单的文件输出(四)
- mybatis显示sql语句 log4j.properties配置文件