package com.citic.util.comm; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import com.citic.util.comm.ConfigFileUtil; /** * Java实现类似C/C++中的__FILE__、__FUNC__、__LINE__等,主要用于日志等功能中。 * * @version 1.0 2011-07-13 * 未使用log4j,没月认真研究 张明伟20170518 */ public class CommFun implements IConstants{ /** * 打印日志 */ private static String filepth = null; private static SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmSS"); private static String[] logfiles=new String[LOGLEVEL.values().length]; //{"err","info","data","debug","all",null}; private static FileOutputStream[] out=new FileOutputStream[LOGLEVEL.values().length]; private static PrintStream[] ps=new PrintStream[LOGLEVEL.values().length]; private static PrintStream stdps=new PrintStream(System.out); private static CommFun commfun=null,commfun1=null; private CommFun() { filepth = ConfigFileUtil.getInstance().getPathName(".."); String day = ft.format(new Date()); System.out.println("dt is " + day); File tfile = new File(filepth + "logs/"); if (!tfile.exists()) { tfile.mkdir(); } // FileOutputStream out= new FileOutputStream(tfile.getPath() // + "/systemout" + day.substring(0, 8) + ".log", true); // FileOutputStream errout = new FileOutputStream(tfile.getPath() // + "/systemerrout" + day.substring(0, 8) + ".log", true); // for(int i=0;i<logfiles.length;i++){ // try { // String tmpstr = tfile.getPath() + File.separator +"SUPIS_" + LOGLEVEL.values()[i].name() // + day.substring(0, 8) + ".log"; // //System.out.println(tmpstr); // out[i] = new FileOutputStream(tmpstr, true); // } catch (FileNotFoundException e) { // e.printStackTrace(); // } // ps[i] = new PrintStream(out[i]); // } } private CommFun(int debuglevel){ if (debuglevel == 0) { return; } if (debuglevel >= ALL || debuglevel <= 0) { debuglevel = ALL; } if (commfun == null) { commfun = new CommFun(); } if(ps[debuglevel-1]!=null){ return; } File tfile = new File(filepth + "logs/"); String day = ft.format(new Date()); try { String tmpstr = tfile.getPath() + File.separator + "SUPIS_" + LOGLEVEL.values()[debuglevel-1].name() + day.substring(0, 8) + ".log"; //System.out.println(tmpstr); out[debuglevel-1] = new FileOutputStream(tmpstr, true); } catch (FileNotFoundException e) { e.printStackTrace(); } ps[debuglevel-1] = new PrintStream(out[debuglevel-1]); } public static void log() { System.setOut(stdps); System.out.println(getFileLineMethod()); } public static void log(int debuglevel, String... parms) { if (debuglevel == 0) { return; } new CommFun(debuglevel); new CommFun(ALL); StringBuffer stb = null; if (parms == null || "".equals(parms)) { stb = new StringBuffer(""); } else { stb = new StringBuffer(parms.length); for (int i = 0; i < parms.length; i++) { stb.append(parms[i] == null ? "" : parms[i]); } } String messge = getFileLineMethod() + "[" + _TIME_() + "]" + stb.toString(); if (debuglevel >= logfiles.length) { debuglevel=ALL; } System.setOut(ps[debuglevel - 1]); System.out.println(messge); if (debuglevel != ALL) { System.setOut(ps[ALL-1]); System.out.println(messge); } } public static void log(String... parms) { new CommFun(ALL); StringBuffer stb=null; if(parms==null||"".equals(parms)){ stb=new StringBuffer(""); }else{ stb = new StringBuffer(parms.length); for(int i=0;i<parms.length;i++){ stb.append(parms[i]==null?"":parms[i]); } } String messge=getFileLineMethod()+ "["+_TIME_()+"]"+ stb.toString(); System.setOut(ps[ALL-1]); System.out.println(messge); } /** * 打印日志时获取当前的程序文件名、行号、方法名 输出格式为:[FileName | LineNumber | MethodName] * * @return */ public static String getFileLineMethod() { StackTraceElement traceElement = ((new Exception()).getStackTrace())[2]; StringBuffer toStringBuffer = new StringBuffer("[") .append(traceElement.getFileName()).append(":") .append(traceElement.getLineNumber()).append(":") .append(traceElement.getMethodName()).append("]"); return toStringBuffer.toString(); } // 当前文件名 public static String _FILE_() { StackTraceElement traceElement = ((new Exception()).getStackTrace())[2]; return traceElement.getFileName(); } // 当前方法名 public static String _FUNC_() { StackTraceElement traceElement = ((new Exception()).getStackTrace())[2]; return traceElement.getMethodName(); } // 当前行号 public static int _LINE_() { StackTraceElement traceElement = ((new Exception()).getStackTrace())[2]; return traceElement.getLineNumber(); } // 当前时间 public static String _TIME_() { Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); return sdf.format(now); } // 把string转换成date public static Date stringToDate(String date, String pattan) { DateFormat sf1 = new SimpleDateFormat("yyyyMMdd"); DateFormat sf2 = new SimpleDateFormat(pattan); String sfstr = ""; try { // sfstr = sf2.format(sf1.parse(date)); sfstr = sf2.format(sf2.parse(date)); } catch (ParseException e) { e.printStackTrace(); } DateFormat df = new SimpleDateFormat(pattan); Date d1; try { d1 = df.parse(sfstr); Calendar g = Calendar.getInstance(); g.setTime(d1); return g.getTime(); } catch (ParseException e) { e.printStackTrace(); } return null; } public static String strNow(){ return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); } public static String strNowRand(){ SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmssSSS"); Date dt = new Date(); Integer i = (int) (100000000 + Math.random() * 100000000); return ft.format(dt) + String.format("%010d", i); } public static void log2file(String filepth){ try { File tfile = new File(filepth + "logs/"); if (!tfile.exists()) { tfile.mkdir(); } FileOutputStream out = new FileOutputStream(tfile.getPath() + "/systemout" + strNow().substring(0, 8) + ".txt", true); FileOutputStream errout = new FileOutputStream(tfile.getPath() + "/systemerrout" + strNow().substring(0, 8) + ".txt", true); PrintStream ps = new PrintStream(out); PrintStream pserr = new PrintStream(errout); System.setOut(ps); System.setErr(pserr); } catch (FileNotFoundException e) { e.printStackTrace(); } } }