Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.13 KB | None | 0 0
  1. import android.util.Log;
  2. import java.lang.reflect.Array;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6.  
  7.  
  8.  
  9. public class TLog {
  10.  
  11. private static String LOG_TAG = "Kone";
  12. private static final boolean Debug = BuildConfig.DEBUG;
  13.  
  14. public static final void v(Object... args) {
  15. println(Log.VERBOSE, args);
  16. }
  17.  
  18. public static final void d(Object... args) {
  19. println(Log.DEBUG, args);
  20. }
  21.  
  22. public static final void i(Object... args) {
  23. println(Log.INFO, args);
  24. }
  25.  
  26. public static final void w(Object... args) {
  27. println(Log.WARN, args);
  28. }
  29.  
  30. public static final void e(Object... args) {
  31. println(Log.ERROR, args);
  32. }
  33.  
  34. private static String stackTrace(int t) {
  35. StackTraceElement[] trace = new Throwable().fillInStackTrace().getStackTrace();
  36. StringBuilder sb = new StringBuilder("打印调用堆栈\n");
  37. for (int i = 1; i < trace.length && t > 0; i++) {
  38. if (trace[i].getClassName().equals(TLog.class.getName())) {
  39. continue;
  40. }
  41. t--;
  42. sb.append("=> ");
  43. sb.append(toSteString(trace[i]));
  44. sb.append("\n");
  45. }
  46. return sb.toString();
  47. }
  48.  
  49. public static final void trace(int t) {
  50. Log.e(LOG_TAG, stackTrace(t));
  51. }
  52.  
  53.  
  54. private static String toSteString(StackTraceElement trace) {
  55. StringBuilder result = new StringBuilder();
  56. result.append(trace.getClassName()).append(".");
  57. result.append(trace.getMethodName());
  58. if (trace.isNativeMethod()) {
  59. result.append("(Native Method)");
  60. } else if (trace.getFileName() != null) {
  61. if (trace.getLineNumber() >= 0) {
  62. result.append("(").append(trace.getFileName()).append(":")
  63. .append(trace.getLineNumber()).append(")");
  64. } else {
  65. result.append("(").append(trace.getFileName()).append(")");
  66. }
  67. } else {
  68. if (trace.getLineNumber() >= 0) {
  69. // The line number is actually the dex pc.
  70. result.append("(Unknown Source:").append(trace.getLineNumber()).append(")");
  71. } else {
  72. result.append("(Unknown Source)");
  73. }
  74. }
  75. return result.toString();
  76. }
  77.  
  78. private static String getLineInfo() {
  79. StackTraceElement[] traces = new Throwable().fillInStackTrace().getStackTrace();
  80. if (traces.length > 3) {
  81. StackTraceElement trace = traces[3];
  82. StringBuilder result = new StringBuilder();
  83. if (trace.getLineNumber() >= 0) {
  84. result.append("(").append(trace.getFileName()).append(":")
  85. .append(trace.getLineNumber()).append(")");
  86. } else {
  87. result.append("(").append(trace.getFileName()).append(")");
  88. }
  89. result.append("#").append(trace.getMethodName());
  90. return result.toString();
  91.  
  92. // return toSteString(trace);
  93. }
  94. return "(Unknown Source)";
  95. }
  96.  
  97. private static int println(int priority, Object... msgs) {
  98. if (!Debug) {
  99. return 0;
  100. }
  101. if (msgs.length == 0) {
  102. return Log.println(priority, LOG_TAG, stackTrace(5));
  103. }
  104. // String tags = LOG_TAG + getLineNumber();
  105. StringBuilder sb = new StringBuilder(getLineInfo());
  106. int len = 40 - sb.length();//保持输出数据对齐
  107. for (int i = 0; i < len; i++) {
  108. sb.append(' ');
  109. }
  110. sb.append("=> ");
  111. for (Object msg : msgs) {
  112. objectToStr(sb, msg);
  113. sb.append(" ");
  114. }
  115.  
  116. //TODO sb.length()>4*1024;
  117. return Log.println(priority, LOG_TAG, sb.toString());
  118. }
  119.  
  120. public static String toString(Object o) {
  121. StringBuilder stringBuilder = new StringBuilder();
  122. TLog.objectToStr(stringBuilder, o);
  123. return stringBuilder.toString();
  124. }
  125.  
  126. public static void objectToStr(StringBuilder sb, Object o) {
  127. if (o == null) {
  128. sb.append("null");
  129. return;
  130. }
  131. if (o instanceof Byte) {
  132. int t = (Byte) o & 0xFF;
  133. if (t < 0x10) {
  134. sb.append('0');
  135. }
  136. sb.append(Integer.toString(t, 16));
  137. return;
  138. }
  139. if (o.getClass().isArray()) {
  140. Log.e("main", "isArray" + o);
  141. int len = Array.getLength(o);
  142. if (len == 0) {
  143. sb.append("[]");
  144. return;
  145. }
  146. len -= 1;
  147. sb.append('[');
  148. for (int i = 0; ; i++) {
  149. objectToStr(sb, Array.get(o, i));
  150. if (i == len) {
  151. sb.append(']');
  152. return;
  153. }
  154. sb.append(',').append(' ');
  155. }
  156. }
  157. if (o instanceof Iterable) {
  158. objectToStr(sb, ((Iterable) o).iterator());
  159. return;
  160. }
  161. if (o instanceof Iterator) {
  162. Iterator it = (Iterator) o;
  163. if (!it.hasNext()) {
  164. sb.append("[]");
  165. return;
  166. }
  167.  
  168. sb.append('[');
  169. for (; ; ) {
  170. Object e = it.next();
  171. objectToStr(sb, e);
  172. if (!it.hasNext()) {
  173. sb.append(']');
  174. return;
  175. }
  176. sb.append(',').append(' ');
  177. }
  178. }
  179. if (o instanceof Map) {
  180. Map map = (Map) o;
  181. Iterator<Entry> i = map.entrySet().iterator();
  182. if (!i.hasNext()) {
  183. sb.append("{}");
  184. return;
  185. }
  186.  
  187. sb.append('{');
  188. for (; ; ) {
  189. Entry e = i.next();
  190. Object key = e.getKey();
  191. Object value = e.getValue();
  192. objectToStr(sb, key);
  193. sb.append('=');
  194. objectToStr(sb, value);
  195. if (!i.hasNext()) {
  196. sb.append('}');
  197. return;
  198. }
  199. sb.append(',').append(' ');
  200. }
  201. }
  202. sb.append(o);
  203. }
  204.  
  205.  
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement