您的位置:首页 > 其它

自定义日志类LogTrace思路及简单例子

2011-07-28 14:52 183 查看
1.新建类LogTrace(注意此类的字段和方法都是静态的):

2.定义字段:级别Level(五种:DEBUG、INFO、WARN、ERROR和FATAL),输出流对象PrintWriter pw(此默认为new PrintWriter(System.out, true))此对象是写日志的(其write方法).

3.初始化参数方法(参数来源有两种1.通过main方法的参数传进来,2.通过读取属性文件得到):主要得到日志级别,日志文件件名,日志是输出到文件还是控制台等.调用设置输出流方法setOutputStream(OutputStream os)此参数是文件输出流对象邦定输出文件名可者,此方法中的关键代码.pw = new PrintWriter(os, true);PrintStream ps = new PrintStream(os, true)可以重写其println方法(可在调用父类println方法前加入时间/线程等日志);重新分配“标准”错误输出流System.setErr(ps)---这名很关键,能自动捕获运行时的异常(比如空指针),因为出异常JVM会打印日志.

4.添加日志方法LogTrace.trace(参数),需重载此方法.参数可以是String,Exception等.

5.在需要加日志地方,调用LogTrace.trace()方法就行了,未处理异常和运行时异常会自动捕获(因为System.setErr(ps)).

简单例子代码如下:

package com.caoyong.log;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.io.PrintStream;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Date;

/*

* 简单例子

*/

public class LogTrace

{

private static PrintWriter pw;

private static PrintStream ps;

public static void init() throws FileNotFoundException

{

String fileName = "d:\\LogTrace.txt";

FileOutputStream fos = new FileOutputStream(fileName);

setOutputStream(fos);

}

private static void setOutputStream(OutputStream os)

{

// PW,PS中的输出流不同,则会记当到不同的文件中.

pw = new PrintWriter(os, true);

ps = new PrintStream(os, true)

{

@Override

public void println(String x)

{

print("\r\n" + getCurrentDate());

super.println(" println String:" + x);

}

@Override

public void print(Object obj)

{

print("\r\n" + getCurrentDate());

super.print(" print Object:" + obj);

}

@Override

public void println(Object x)

{

print("\r\n" + getCurrentDate());

super.println(" println Object:" + x);

}

};

System.setOut(ps);

System.setErr(ps);

}

private static String getCurrentDate()

{

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

return sdf.format(new Date());

}

public static void trace(String s)

{

// PW,PS都记录会重复记录日志.

pw.write("\r\n" + getCurrentDate() + " pw trace String:" + s);

pw.flush();

ps.println(" trace String:" + s);

}

public static void trace(Exception e)

{

ps.println("trace Exception begin:");

e.printStackTrace(System.err);

ps.println("trace Exception end:");

}

public static void close()

{

pw.flush();

pw.close();

ps.flush();

ps.close();

}

}

package test;

import java.io.FileNotFoundException;

import com.caoyong.log.LogTrace;

public class LogTraceTest

{

public static void main(String[] args) throws FileNotFoundException

{

//注意整个程序运行之前需要初始化日志对象.

LogTrace.init();

String s = "abc";

LogTrace.trace(s);

s = "abc111";

LogTrace.trace(s);

try

{

Integer.parseInt(s);

} catch (NumberFormatException e1)

{

LogTrace.trace("NumberFormatException error s:" + s);

}

try

{

int a[] = new int[3];

System.out.println(a[5]);

} catch (Exception e)

{

// e.printStackTrace();//这里默认的是是e.printStackTrace(System.out);就是打印到控制台

LogTrace.trace(e);

}

// 测试不捕获异常,自动写日志

Integer.parseInt(s);

// 如果上面的Integer.parseInt(s);出现异常则当前主线程会中断,即后续语句不会执行直接退出.

LogTrace.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: