LogUtil:Log 工具类

很方便的 Log 工具类

import android.util.Log;

public class LogUtil {

	private static final String TAG = MyApplication.context.getString(R.string.app_name);
	//debug版本是 BuildConfig.DEBUG = true
	private static boolean isDebug = BuildConfig.DEBUG;
	/**
	 * 写文件的锁对象
	 */
	private static final Object mLogLock = new Object();
	/**
	 * 用于记时的变量
	 */
	private static long mTimestamp = 0;
	private static final String LINE_CHAR = "=";
	private static final int LENGTH = 80;
	private static String LINE;

	static {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < LENGTH; i++) {
			sb.append(LINE_CHAR);
		}
		LINE = sb.toString();
	}

	private LogUtil() {

	}

	/**
	 * 把 Log 存储到文件中
	 *
	 * @param log  需要存储的日志
	 * @param path 存储路径
	 */
	public static void log2File(String log, String path) {
		log2File(log, path, true);
	}

	/**
	 * 把 Log 存储到文件中
	 *
	 * @param log
	 * @param path
	 * @param append
	 */
	public static void log2File(String log, String path, boolean append) {
		synchronized (mLogLock) {
			FileUtil.writeFile(log + "\r\n", path, append);
		}
	}

	/**
	 * 打印网络请求错误日志
	 *
	 * @param errorMsg
	 * @param errorCode
	 */
	private static void printHttpRequestLogError(String errorMsg, int errorCode) {
		printLogError("OKHTTP", errorMsg, errorCode);
	}

	/**
	 * 打印 list
	 *
	 * @param list
	 * @param <T>
	 */
	public static <T> void printList(List<T> list) {
		if (list == null || list.size() < 1) {
			return;
		}
		int size = list.size();
		i("---begin---");
		for (int i = 0; i < size; i++) {
			i(i + ":" + list.get(i).toString());
		}
		i("---end---");
	}

	/**
	 * 打印 array
	 *
	 * @param array
	 * @param <T>
	 */
	public static <T> void printArray(T[] array) {
		if (array == null || array.length < 1) {
			return;
		}
		int length = array.length;
		i("---begin---");
		for (int i = 0; i < length; i++) {
			i(i + ":" + array[i].toString());
		}
		i("---end---");
	}

	/**
	 * 以级别为 e 的形式输出 msg 信息,附带时间戳,用于输出一个时间段起始点
	 *
	 * @param msg
	 */
	public static void msgStartTime(String msg) {
		mTimestamp = System.currentTimeMillis();
		if (!TextUtils.isEmpty(msg)) {
			e("[Started:" + mTimestamp + "]" + msg);
		}
	}

	/**
	 * 以级别为 e 的形式输出 msg 信息,附带时间戳,用于输出一个时间段结束点
	 *
	 * @param msg
	 */
	public static void elapsed(String msg) {
		long currentTime = System.currentTimeMillis();
		long elapsedTime = currentTime - mTimestamp;
		mTimestamp = currentTime;
		e("[Elapsed:" + elapsedTime + "]" + msg);
	}

	/**
	 * 用法:LogUtil.v(msg);
	 *
	 * @param msg
	 */
	public static void v(String msg) {
		v(TAG, msg);
	}

	/**
	 * 用法:LogUtil.v(tag, msg);
	 *
	 * @param tag
	 * @param msg
	 */
	public static void v(String tag, String msg) {
		print(Log.VERBOSE, tag, msg);
	}

	/**
	 * 用法:LogUtil.v(MainActivity.this, msg);
	 *
	 * @param object
	 * @param msg
	 */
	public static void v(Object object, String msg) {
		print(Log.VERBOSE, object.getClass().getSimpleName(), msg);
	}

	/**
	 * 用法:LogUtil.d(msg);
	 *
	 * @param msg
	 */
	public static void d(String msg) {
		d(TAG, msg);
	}

	/**
	 * 用法:LogUtil.d(tag, msg);
	 *
	 * @param tag
	 * @param msg
	 */
	public static void d(String tag, String msg) {
		print(Log.DEBUG, tag, msg);
	}

	/**
	 * 用法:LogUtil.d(MainActivity.this, msg);
	 *
	 * @param object
	 * @param msg
	 */
	public static void d(Object object, String msg) {
		print(Log.DEBUG, object.getClass().getSimpleName(), msg);
	}

	/**
	 * 用法:LogUtil.i(msg);
	 *
	 * @param msg
	 */
	public static void i(String msg) {
		i(TAG, msg);
	}

	/**
	 * 用法:LogUtil.i(tag, msg);
	 *
	 * @param tag
	 * @param msg
	 */
	public static void i(String tag, String msg) {
		print(Log.INFO, tag, msg);
	}

	/**
	 * 用法:LogUtil.i(MainActivity.this, msg);
	 *
	 * @param object
	 * @param msg
	 */
	public static void i(Object object, String msg) {
		print(Log.INFO, object.getClass().getSimpleName(), msg);
	}

	/**
	 * 用法:LogUtil.w(msg);
	 *
	 * @param msg
	 */
	public static void w(String msg) {
		w(TAG, msg);
	}

	/**
	 * 用法:LogUtil.w(tag, msg);
	 *
	 * @param tag
	 * @param msg
	 */
	public static void w(String tag, String msg) {
		print(Log.WARN, tag, msg);
	}

	/**
	 * 用法:LogUtil.w(MainActivity.this, msg);
	 *
	 * @param object
	 * @param msg
	 */
	public static void w(Object object, String msg) {
		print(Log.WARN, object.getClass().getSimpleName(), msg);
	}

	/**
	 * 用法:LogUtil.e(msg);
	 *
	 * @param msg
	 */
	public static void e(String msg) {
		e(TAG, msg);
	}

	/**
	 * 用法:LogUtil.e(tag, msg);
	 *
	 * @param tag
	 * @param msg
	 */
	public static void e(String tag, String msg) {
		print(Log.ERROR, tag, msg);
	}

	/**
	 * 用法:LogUtil.e(MainActivity.this, msg);
	 *
	 * @param object
	 * @param msg
	 */
	public static void e(Object object, String msg) {
		print(Log.ERROR, object.getClass().getSimpleName(), msg);
	}

	/** 以级别为 e 的形式输出Throwable */
	public static void e(Throwable tr) {
		e("", tr);
	}

	/** 以级别为 e 的形式输出Throwable */
	public static void e(String msg, Throwable tr) {
		print(Log.ERROR, TAG, msg, tr);
	}

	/**
	 * 用法:LogUtil.wtf(msg);
	 *
	 * @param msg
	 */
	public static void wtf(String msg) {
		wtf(TAG, msg);
	}

	/**
	 * 用法:LogUtil.wtf(tag, msg);
	 *
	 * @param tag
	 * @param msg
	 */
	public static void wtf(String tag, String msg) {
		print(Log.ASSERT, tag, msg);
	}

	/**
	 * 用法:LogUtil.wtf(MainActivity.this, msg);
	 *
	 * @param object
	 * @param msg
	 */
	public static void wtf(Object object, String msg) {
		print(Log.ASSERT, object.getClass().getSimpleName(), msg);
	}

	/**
	 * 打印自定义 Log
	 *
	 * @param errorMsg
	 * @param errorCode
	 */
	public static void printLogError(String errorMsg, int errorCode) {
		printLogError(TAG, errorMsg, errorCode);
	}

	/**
	 * 打印自定义 Log
	 *
	 * @param object
	 * @param errorMsg
	 * @param errorCode
	 */
	public static void printLogError(Object object, String errorMsg, int errorCode) {
		printLogError(object.getClass().getSimpleName(), errorMsg, errorCode);
	}

	/**
	 * 打印自定义 Log
	 *
	 * @param tag
	 * @param errorMsg
	 * @param errorCode
	 */
	public static void printLogError(String tag, String errorMsg, int errorCode) {
		e(tag, LINE);//start
		e(tag, "                                   错误信息                                     ");
		e(tag, LINE);//title
		e(tag, "                                                                               ");
		e(tag, errorMsg);
		e(tag, "                                                                               ");
		e(tag, "错误码: " + errorCode);
		e(tag, "                                                                               ");
		e(tag, LINE);//end
	}

	/**
	 * 打印 Log
	 *
	 * @param level
	 * @param tag
	 * @param msg
	 */
	private static void print(int level, String tag, String msg) {
		//不是 debug 模式,则关闭 Log 打印
		if (!isDebug) {
			return;
		}

		switch (level) {
			case Log.VERBOSE:
				Log.v(tag, msg);
				break;
			case Log.DEBUG:
				Log.d(tag, msg);
				break;
			case Log.INFO:
				Log.i(tag, msg);
				break;
			case Log.WARN:
				Log.w(tag, msg);
				break;
			case Log.ERROR:
				Log.e(tag, msg);
				break;
			case Log.ASSERT:
				Log.wtf(tag, msg);
				break;
		}
	}

	/**
	 * 打印 Log
	 *
	 * @param level
	 * @param tag
	 * @param msg
	 * @param tr
	 */
	private static void print(int level, String tag, String msg, Throwable tr) {
		//不是 debug 模式,则关闭 Log 打印
		if (!isDebug) {
			return;
		}

		switch (level) {
			case Log.VERBOSE:
				Log.v(tag, msg, tr);
				break;
			case Log.DEBUG:
				Log.d(tag, msg, tr);
				break;
			case Log.INFO:
				Log.i(tag, msg, tr);
				break;
			case Log.WARN:
				Log.w(tag, msg, tr);
				break;
			case Log.ERROR:
				Log.e(tag, msg, tr);
				break;
			case Log.ASSERT:
				Log.wtf(tag, msg, tr);
				break;
		}
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android开发中,我们经常会使用Log来打印日志。但是,Android原生的Log输出信息有限,为了更好地输出和管理日志,我们可以自定义LogUtil。 下面是一个简单的LogUtil类,可以自定义输出日志级别、输出信息格式等: ```java public class LogUtil { private static final String TAG = "LogUtil"; private static boolean sDebug = true; // 是否打印日志 private static boolean sSaveLog = false; // 是否保存日志到文件 private static String sLogPath = Environment.getExternalStorageDirectory().getPath() + "/log.txt"; // 日志保存路径 public static void setDebug(boolean debug) { sDebug = debug; } public static void setSaveLog(boolean saveLog) { sSaveLog = saveLog; } public static void setLogPath(String logPath) { sLogPath = logPath; } public static void v(String msg) { if (sDebug) { Log.v(TAG, msg); } saveLogToFile("V", TAG, msg); } public static void d(String msg) { if (sDebug) { Log.d(TAG, msg); } saveLogToFile("D", TAG, msg); } public static void i(String msg) { if (sDebug) { Log.i(TAG, msg); } saveLogToFile("I", TAG, msg); } public static void w(String msg) { if (sDebug) { Log.w(TAG, msg); } saveLogToFile("W", TAG, msg); } public static void e(String msg) { if (sDebug) { Log.e(TAG, msg); } saveLogToFile("E", TAG, msg); } private static void saveLogToFile(String level, String tag, String msg) { if (sSaveLog) { try { File file = new File(sLogPath); FileWriter fw = new FileWriter(file, true); BufferedWriter bw = new BufferedWriter(fw); bw.write("[" + level + "] " + tag + ": " + msg + "\n"); bw.close(); fw.close(); } catch (IOException e) { Log.e(TAG, "saveLogToFile: " + e.getMessage()); } } } } ``` 使用方法: ```java LogUtil.setDebug(true); // 设置是否打印日志 LogUtil.setSaveLog(true); // 设置是否保存日志到文件 LogUtil.setLogPath("/sdcard/log.txt"); // 设置日志保存路径 LogUtil.v("verbose log"); LogUtil.d("debug log"); LogUtil.i("info log"); LogUtil.w("warning log"); LogUtil.e("error log"); ``` 以上就是一个简单的LogUtil类的实现,可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值