Android 日志打印工具类 可显示打印所在的方法和行号
来源:互联网 发布:怎么找网络水军公司 编辑:程序博客网 时间:2024/05/01 12:31
Android 日志打印工具类 可显示打印所在的方法和行号。便于开发人员查看Log信息~~
[java] view plain copy
- package com.newland.util;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Formatter;
- import java.util.Locale;
- import android.os.Environment;
- import android.text.TextUtils;
- import android.util.Log;
- /**
- * Log工具,类似android.util.Log。 tag自动产生,格式:
- * customTagPrefix:className.methodName(Line:lineNumber),
- * customTagPrefix为空时只输出:className.methodName(Line:lineNumber)。
- */
- public class LogUtil {
- public static String customTagPrefix = ""; // 自定义Tag的前缀,可以是作者名
- public static boolean isSaveLog = false; // 是否把保存日志到SD卡中
- public static final String LOG_PATH = Environment.getExternalStorageDirectory().getPath(); // SD卡中的根目录
- private static DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.SIMPLIFIED_CHINESE);
- private LogUtil() {
- }
- // 容许打印日志的类型,默认是true,设置为false则不打印
- public static boolean allowD = true;
- public static boolean allowE = true;
- public static boolean allowI = true;
- public static boolean allowV = true;
- public static boolean allowW = true;
- public static boolean allowWtf = true;
- private static String generateTag(StackTraceElement caller) {
- String tag = "%s.%s(Line:%d)"; // 占位符
- String callerClazzName = caller.getClassName(); // 获取到类名
- callerClazzName = callerClazzName.substring(callerClazzName.lastIndexOf(".") + 1);
- tag = String.format(tag, callerClazzName, caller.getMethodName(), caller.getLineNumber()); // 替换
- tag = TextUtils.isEmpty(customTagPrefix) ? tag : customTagPrefix + ":" + tag;
- return tag;
- }
- /**
- * 自定义的logger
- */
- public static CustomLogger customLogger;
- public interface CustomLogger {
- void d(String tag, String content);
- void d(String tag, String content, Throwable e);
- void e(String tag, String content);
- void e(String tag, String content, Throwable e);
- void i(String tag, String content);
- void i(String tag, String content, Throwable e);
- void v(String tag, String content);
- void v(String tag, String content, Throwable e);
- void w(String tag, String content);
- void w(String tag, String content, Throwable e);
- void w(String tag, Throwable tr);
- void wtf(String tag, String content);
- void wtf(String tag, String content, Throwable e);
- void wtf(String tag, Throwable tr);
- }
- public static void d(String content) {
- if (!allowD) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.d(tag, content);
- } else {
- Log.d(tag, content);
- }
- }
- public static void d(String content, Throwable e) {
- if (!allowD) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.d(tag, content, e);
- } else {
- Log.d(tag, content, e);
- }
- }
- public static void e(String content) {
- if (!allowE) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.e(tag, content);
- } else {
- Log.e(tag, content);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void e(Throwable e) {
- if (!allowE) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.e(tag, "error", e);
- } else {
- Log.e(tag, e.getMessage(), e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, e.getMessage());
- }
- }
- public static void e(String content, Throwable e) {
- if (!allowE) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.e(tag, content, e);
- } else {
- Log.e(tag, content, e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, e.getMessage());
- }
- }
- public static void i(String content) {
- if (!allowI) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.i(tag, content);
- } else {
- Log.i(tag, content);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void i(String content, Throwable e) {
- if (!allowI) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.i(tag, content, e);
- } else {
- Log.i(tag, content, e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void v(String content) {
- if (!allowV) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.v(tag, content);
- } else {
- Log.v(tag, content);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void v(String content, Throwable e) {
- if (!allowV) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.v(tag, content, e);
- } else {
- Log.v(tag, content, e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void w(String content) {
- if (!allowW) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.w(tag, content);
- } else {
- Log.w(tag, content);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void w(String content, Throwable e) {
- if (!allowW) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.w(tag, content, e);
- } else {
- Log.w(tag, content, e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void w(Throwable e) {
- if (!allowW) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.w(tag, e);
- } else {
- Log.w(tag, e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, e.toString());
- }
- }
- public static void wtf(String content) {
- if (!allowWtf) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.wtf(tag, content);
- } else {
- Log.wtf(tag, content);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void wtf(String content, Throwable e) {
- if (!allowWtf) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.wtf(tag, content, e);
- } else {
- Log.wtf(tag, content, e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, content);
- }
- }
- public static void wtf(Throwable e) {
- if (!allowWtf) {
- return;
- }
- StackTraceElement caller = getCallerStackTraceElement();
- String tag = generateTag(caller);
- if (customLogger != null) {
- customLogger.wtf(tag, e);
- } else {
- Log.wtf(tag, e);
- }
- if (isSaveLog) {
- point(LOG_PATH, tag, e.toString());
- }
- }
- private static StackTraceElement getCallerStackTraceElement() {
- return Thread.currentThread().getStackTrace()[4];
- }
- public static void point(String path, String tag, String msg) {
- if (isSDAva()) {
- long timestamp = System.currentTimeMillis();
- String time = formatter.format(new Date());
- path = path + "/logs/log-" + time + "-" + timestamp + ".log";
- File file = new File(path);
- if (!file.exists()) {
- createDipPath(path);
- }
- BufferedWriter out = null;
- try {
- out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
- out.write(time + " " + tag + " " + msg + "\r\n");
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (out != null) {
- out.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- /**
- * 根据文件路径 递归创建文件
- */
- public static void createDipPath(String file) {
- String parentFile = file.substring(0, file.lastIndexOf("/"));
- File file1 = new File(file);
- File parent = new File(parentFile);
- if (!file1.exists()) {
- parent.mkdirs();
- try {
- file1.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- private static class ReusableFormatter {
- private Formatter formatter;
- private StringBuilder builder;
- public ReusableFormatter() {
- builder = new StringBuilder();
- formatter = new Formatter(builder);
- }
- public String format(String msg, Object... args) {
- formatter.format(msg, args);
- String s = builder.toString();
- builder.setLength(0);
- return s;
- }
- }
- private static final ThreadLocal<ReusableFormatter> thread_local_formatter = new ThreadLocal<ReusableFormatter>() {
- protected ReusableFormatter initialValue() {
- return new ReusableFormatter();
- }
- };
- public static String format(String msg, Object... args) {
- ReusableFormatter formatter = thread_local_formatter.get();
- return formatter.format(msg, args);
- }
- private static boolean isSDAva() {
- return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) || Environment.getExternalStorageDirectory().exists();
- }
- }
0 0
- Android 日志打印工具类 可显示打印所在的方法和行号
- Android 日志打印工具类 可显示打印所在的方法和行号
- ios打印日志的类,方法,及行号
- Android打印日志工具类
- Android-日志打印工具类
- Android 日志打印工具类
- Android日志打印工具
- Android日志打印工具
- log4j打印出所在行号
- 打印日志的工具类
- iOS中打印日志显示系统详细时间,类名,行号及打印值
- iOS中打印日志显示系统详细时间,类名,行号及打印值
- iOS中打印日志显示系统详细时间,类名,行号及打印值
- iOS中打印日志显示系统详细时间,类名,行号及打印值
- iOS 打印日志显示系统详细时间,类名,行号及打印值
- iOS中打印日志显示系统详细时间,类名,行号及打印值
- iOS中打印日志显示系统详细时间,类名,行号及打印值
- 日志打印工具类
- Android 支付开发(支付宝)
- 公司开发多个应用的时候是否可以使用同一个签名(*.jks)
- apk反编译工具的使用,超实用
- Spring Retry中文文档
- SVD分解
- Android 日志打印工具类 可显示打印所在的方法和行号
- js笔记 -- 最佳实践
- Android开发中---启动页面
- 常见IE6 bug兼容总结
- jsp及Servlet经典面试题以及答案
- 设置高级的Logstash 管道
- maven遇到的坑——2
- 一步一步做一个iOS的静态库
- OC中新的传值方式--单例、通知与匿名函数block