自定义日志类LogTrace思路及简单例子
来源:互联网 发布:etsy软件 编辑:程序博客网 时间:2024/06/05 18:31
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();
}
}
- 自定义日志类LogTrace思路及简单例子
- C++下的简单Logtrace的编写
- 自定义简单日志记录类
- AJAX 简单类及例子
- 自定义Log4j日志记录例子
- 自定义ClassLoader 简单例子
- 自定义view简单例子
- mysql binlog日志优化及思路
- C#射击类小游戏简单思路及代码
- 自定义ClassLoader的简单例子
- 自定义AuthenticationProvider的简单例子
- 自定义UITabBarController的简单例子
- 自定义View简单小例子
- Mysql 自定义函数简单例子
- nginx日志格式及自定义日志配置
- nginx日志格式及自定义日志配置
- hadoop的序列化分析及一个自定义Writable的简单例子
- logback+slf4j日志使用简单入门例子
- 在windows7的虚拟机上安装Chrome OS
- The default values for java data types:
- 复习C++ 走一遍基础 留下笔记----{二}
- SQL字符串操作汇总
- 把datagridview导出到execl表格中、datagridview添加下拉列表框
- 自定义日志类LogTrace思路及简单例子
- 深入解析scanf()/getchar()和gets()等函数针对字符串输入的问题
- 使用Axis2中的工具wsdl2Java的生成客户端和服务端代码
- STL可能的误用-find_first_of和erase
- 指针的使用方法【三】
- VS2010, WPF工程添加图片资源
- winrar4.0 注册码 key
- securecrt
- WPF,Grid划分界面区域