首页  编辑  

安卓最简单的替换系统自带日志类并写入文件的方法

Tags: /Android/   Date Created:
我们都知道安卓只带了一个Log类,可以在Logcat中输出日志,但有的时候如果需要把日志写入文件,该怎么办?程序里面已经有大量的Log.i, Log.d, Log.w, Log.e了,难道一个个去修改代码吗?
简单的方法,不修改原来的代码,实现把Log日志写入文件:
首先新建一个类,如下面,保存为Log.java,修改第一行为你的程序的包名即可。
然后重要一点,是把你的Java代码中前面的Import android.util.log这行注释掉即可搞定收工了!!
package com.company.package;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.os.Environment;

public class Log {
private static final String NEW_LINE = System.getProperty("line.separator");
public static boolean mLogcatAppender = true;
final static File mLogFile;

static {
mLogFile = new File(Environment.getExternalStorageDirectory() + "/修改日志目录即可/", "logs.log");
if (mLogFile.length() > 1000 * 1000 * 5) mLogFile.delete(); // 超过 5M,自动删除,防止文件太大
if (!mLogFile.exists()) {
try {
mLogFile.createNewFile();
} catch (final IOException e) {
e.printStackTrace();
}
}
logDeviceInfo();
}

public static void i(String TAG, String message) {
appendLog(TAG + " : " + message);
if (mLogcatAppender) {
android.util.Log.i(TAG, message);
}
}

public static void d(String TAG, String message) {
appendLog(TAG + " : " + message);
if (mLogcatAppender) {
android.util.Log.d(TAG, message);
}
}

public static void e(String TAG, String message) {
appendLog(TAG + " : " + message);
if (mLogcatAppender) {
android.util.Log.e(TAG, message);
}
}

public static void v(String TAG, String message) {
appendLog(TAG + " : " + message);
if (mLogcatAppender) {
android.util.Log.v(TAG, message);
}
}

public static void w(String TAG, String message) {
appendLog(TAG + " : " + message);
if (mLogcatAppender) {
android.util.Log.w(TAG, message);
}
}

private static synchronized void appendLog(String text) {
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

try {
final FileWriter fileOut = new FileWriter(mLogFile, true);
fileOut.append(sdf.format(new Date()) + " : " + text + NEW_LINE);
fileOut.close();
} catch (final IOException e) {
e.printStackTrace();
}
}

private static void logDeviceInfo() {
appendLog("Model : " + android.os.Build.MODEL);
appendLog("Brand : " + android.os.Build.BRAND);
appendLog("Product : " + android.os.Build.PRODUCT);
appendLog("Device : " + android.os.Build.DEVICE);
appendLog("Codename : " + android.os.Build.VERSION.CODENAME);
appendLog("Release : " + android.os.Build.VERSION.RELEASE);
}

}