package com.example.graphics01; import android.util.Log; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; public class Logger { protected static Logger logger; private DateFormat dateFormat; protected Logger() { super(); setDateFormat(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM)); getDateFormat().setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); }//Logger() private static Logger getInstance() { String className; if (getLogger() == null) { try { setLogger(new Logger()); } catch (Exception e) { throw new RuntimeException( getStackTrace(e)); } } //if (logger == null) return getLogger(); }// getInstance() public static String getStackTrace(Exception e) { String s = ""; StackTraceElement[] elements = e.getStackTrace(); for (int i = 0; i < elements.length; i++) { s += String.format(Locale.US, "%7d: %s%n", i, elements[i].toString()); }//for (int i = 0; i < elements.length; i++) return s; }//getStackTrace(Exception e) public static String d(int level, String tag, String message) { return getInstance().print(tag, message); }//d() public static String e(int level, String tag, String message) { return getInstance().printError(tag, message); }//e() public static void p(int level) { getInstance().printMethodsOnInstance(level, 0, ""); } public static void p(int level, int depth) { getInstance().printMethodsOnInstance(level, depth, ""); } public static void p(int level, String message) { getInstance().printMethodsOnInstance(level, 0, message); } public static void p(int level, int depth, String message) { getInstance().printMethodsOnInstance(level, depth, message); } private void printMethodsOnInstance(int level, int depth, String message) { final int base = 4; String class_Method_Line = getClass_Method_Line(Thread.currentThread().getStackTrace()[base].toString()); d(level, "##", class_Method_Line + message); StackTraceElement[] elements = Thread.currentThread().getStackTrace(); if (elements.length < base + depth) { depth = elements.length - base; } int start = 0; for (int i = 1; i < depth; i++) { d(level, "#", "# " + i + ":" + getClass_Method_Line(elements[base + i].toString())); } } public String getClass_Method_Line(String traceElement) { int sourceNameHead = traceElement.indexOf("(") + 1; int methodHead = -1; for (int i = sourceNameHead - 2; i > 0; i--) { String s = traceElement.substring(i, i + 1); if (s.equals(".") || s.equals(":") || s.equals(" ")) { methodHead = i + 1; break; } } if (methodHead < 0) { return traceElement.substring(sourceNameHead); } int classHead = -1; for (int i = methodHead - 2; i > 0; i--) { String s = traceElement.substring(i, i + 1); if (s.equals(".") || s.equals(":") || s.equals(" ")) { classHead = i + 1; break; } } if (classHead < 0) { return traceElement.substring(methodHead); } return traceElement.substring(classHead); } public String getMethodName(String traceElement) { int kakko = traceElement.indexOf("("); int methodHead = 0; for (int i = kakko - 1; i > 0; i--) { if (traceElement.charAt(i) == '.') { methodHead = i + 1; break; } } String methodName = traceElement.substring(methodHead, kakko); int classHead = 0; for (int i = methodHead - 2; i > 0; i--) { if (traceElement.charAt(i) == '.') { classHead = i + 1; break; } } String className = traceElement.substring(classHead, methodHead - 1); return className + "#" + methodName; } public static Logger getLogger() { return logger; } private static void setLogger(Logger logger) { Logger.logger = logger; } public String getNow() { return getDateFormat().format(new Date()); }// getNow() public String print(String tag, String message) { Log.d(tag, message); return String.format("%s %s", tag, message); }//print(String tag, String message) protected String printError(String tag, String message) { Log.e(tag, message); return String.format("%s %s", tag, message); }//printError(String tag, String message) protected DateFormat getDateFormat() { return dateFormat; } private void setDateFormat(DateFormat dateFormat) { this.dateFormat = dateFormat; } }//class Logger