您的位置:首页 > 移动开发 > Android开发

Android Log打印保存到文件中

2018-01-06 11:01 274 查看
public class LogToFile extends HandlerThread{
private static Handler mHandler;
private static LogToFile mLogToFile;
private static final String LOG_THREAD = "LOG_THREAD";
private static final String TAG = "LogToFile";

private LogToFile(String name) {
super(name);
}
//在application初始化 LogToFile.init();
public static void init() {
if (mLogToFile == null) {
mLogToFile = new LogToFile(LOG_THREAD);
mLogToFile.start();
mHandler = new Handler(mLogToFile.getLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg != null) {//子线程执行保存文件操作
Bundle data = msg.getData();
String tag = data.getString("TAG", "tag is null");
String message = data.getString("MESSAGE", "message is null");
saveLogFile(tag, message);
}
}
};
}
}
//在程序退出时调用
public static void deInit() {
if (mLogToFile != null) {
mHandler.removeCallbacksAndMessages(null);
mLogToFile.quit();
mLogToFile = null;
mHandler=null;
}
}

public static void v(String tag, String msg) {
if (BuildConfig.DEBUG) {
Log.d(tag, msg);
}
toChildThread(tag, msg);
}

public static void d(String tag, String msg) {
if (BuildConfig.DEBUG) {
Log.d(tag, msg);
}
toChildThread(tag, msg);
}

public static void d(String msg) {
if (BuildConfig.DEBUG) {
Log.d(TAG, msg);
}
toChildThread(TAG, msg);
}

public static void i(String tag, String msg) {
if (BuildConfig.DEBUG) {
Log.i(tag, msg);
}
toChildThread(tag, msg);
}

public static void i(String msg) {
if (BuildConfig.DEBUG) {
Log.i(TAG, msg);
}
toChildThread(TAG, msg);
}

public static void w(String tag, String msg) {
if (BuildConfig.DEBUG) {
Log.w(tag, msg);
}
toChildThread(tag, msg);
}

public static void e(String tag, String msg) {
if (BuildConfig.DEBUG) {
Log.e(tag, msg);
}
toChildThread(tag, msg);
}

public static void e(String msg) {
if (BuildConfig.DEBUG) {
Log.e(TAG, msg);
}
toChildThread(TAG, msg);
}

private static void toChildThread(String tag, String message) {

if (!BuildConfig.DEBUG) {//release版本不保存
return;
}

if (mHandler != null && !TextUtils.isEmpty(message)) {
Message obtain = Message.obtain();
Bundle bundle = new Bundle();
if (TextUtils.isEmpty(tag)) {
tag = TAG;
}
bundle.putString("TAG", tag);
bundle.putString("MESSAGE", message);
obtain.setData(bundle);
mHandler.sendMessage(obtain);
}
}

private static final int LOG_FILE_SIZE_MAX = 20 * 1024 * 1024;
private static final String PATH = "/sdcard/";
private static final String NAME = "MyLog.txt";
private static SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");

private static void saveLogFile(String tag, String message) {//

if (TextUtils.isEmpty(tag)) {
tag = "--Tag null--";
}

FileOutputStream fileOutputStream = null;
try {
File file = new File(PATH, NAME);
if (file == null || !file.exists()) {
file.getParentFile().mkdirs();
file.createNewFile();
}
fileOutputStream = new FileOutputStream(file, true);

long size = fileOutputStream.getChannel().size();
if (size > LOG_FILE_SIZE_MAX) {//超过20m,删除
fileOutputStream.close();
file.delete();
return;
}
String result = DateFormat.format(new Date()) + "/" + tag + "=====>>[" + message + "]" + "\n";
fileOutputStream.write(result.getBytes());
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: