packagecom.ming.util;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.Date;/*** 文本记录日志
*
*@authorMing
* @update 2016-11-30 17:13:00 (1,使用子线程写入文本日志;2,添加异常日志记录)
**/
public classLogUtil {private static String log_path = getBasePath();//日志保存路径
private static String log_name = "yxt_log";//日志文件名(前部分)
private static boolean console_out = true;//日志是否输出到控制台
/** yyyy-MM: 每个月更新一个log日志 yyyy-ww: 每个星期更新一个log日志 yyyy-MM-dd: 每天更新一个log日志
* yyyy-MM-dd-a: 每天的午夜和正午更新一个log日志 yyyy-MM-dd-HH: 每小时更新一个log日志
* yyyy-MM-dd-HH-mm: 每分钟更新一个log日志*/
private static String update_hz = "yyyy-MM";//更新日志的频率,每月更新一次
private static long max_log_size = 1024 * 1024 * 10;//单个日志文件最大大小 10M
public static voiddebug(String msg) {
runWrite(msg, log_path, log_name+ "_debug");
}public static voidinfo(String msg) {
runWrite(msg, log_path, log_name+ "_info");
}public static voiderror(String msg) {
runWrite(msg, log_path, log_name+ "_error");
}public static voidexception(Exception e) {
String errorMessage= e.getMessage() + "";
StackTraceElement[] eArray=e.getCause().getStackTrace();for (int i = 0; i < eArray.length; i++) {
String className=e.getCause().getStackTrace()[i].getClassName();
String MethodName=e.getCause().getStackTrace()[i].getMethodName();int LineNumber =e.getCause().getStackTrace()[i].getLineNumber();
errorMessage= errorMessage + "\n\t---" + className + "." + MethodName + ",\tline:" +LineNumber;
}
logResult(errorMessage, log_path, log_name+ "_exception");
}/*** 日志根目录
*
*@return
*/
public staticString getBasePath() {
String s= Thread.currentThread().getContextClassLoader().getResource("").getPath();
s= s.substring(0, s.indexOf("WEB-INF")) + "log" +File.separator;returns;
}/*** 写日志
*
*@paramsWord
* 要写入日志里的文本内容*/
public static voidlogResult(String sWord) {
runWrite(sWord, log_path, log_name);
}public static voidlogResult(String sWord, String logPath, String logName) {
FileWriter writer= null;try{
File dir= newFile(logPath);if (!dir.exists()) {
dir.mkdirs();
}
String dt= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(newDate());
File f= new File(logPath + logName + "_" + new SimpleDateFormat(update_hz).format(new Date()) + ".txt");if (!f.exists()) {
f.createNewFile();
sWord= "AllMing 日志\r\n" + "[" + dt + "]\t" +sWord;
}else{long logSize =f.length();//文件大小超过10M,备份
if (logSize >=max_log_size) {
String backLogName= logPath +logName+ new SimpleDateFormat("_yyyy-MM-dd.HHmmss.SSS").format(new Date()) + ".txt";
f.renameTo(newFile(backLogName));
}
}
writer= new FileWriter(f, true);
writer.write("[" + dt + "]\t" + sWord + "\r\n");if(console_out) {
System.out.println("[" + dt + "]\t" +sWord);
}
}catch(Exception e) {
System.out.println("记录日志异常:" +e.toString());
e.printStackTrace();
}finally{if (writer != null) {try{
writer.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}public static void runWrite(final String sWord,final String logPath,finalString logName) {newThread() {public voidrun() {
logResult(sWord, logPath, logName);
}
}.start();;
}public static voidmain(String[] args) {for (int i = 0; i <1000; i++) {
error(""+i);
}
}
}