import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date; public class LOG { private static final int LEVEL_I = 1; private static final int LEVEL_D = 2; private static final int LEVEL_W = 3; private static final int LEVEL_E = 4; private static final String FILEPATH = "/folderPath"; private static final String FILENAME = "log.txt"; private static DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); public static void logD(String msg) {
log(LEVEL_D, msg);
} public static void logI(String msg) {
log(LEVEL_I, msg);
} public static void logW(String msg) {
log(LEVEL_W, msg);
} public static void logE(String msg) {
log(LEVEL_E, msg);
} public static void logE(Throwable ex) {
if (!AppConstants.DEBUG) {
return;
}
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable cause = ex.getCause();
while (cause != null) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
}
printWriter.close();
String result = writer.toString();
final Throwable t = AppConstants.DEBUG ? new Throwable() : null;
final StackTraceElement[] elements = t != null ? t.getStackTrace() : null;
String callerClassName = t != null ? elements[2].getClassName() : "N/A";
int pos = callerClassName.lastIndexOf('.');
if (pos >= 0) {
callerClassName = callerClassName.substring(pos + 1);
}
final String tag = callerClassName;
Log.e(tag, result);
try {
write(tag, result);
} catch (IOException e) {
e.printStackTrace();
}
} private static void log(int level, String msg) {
if (!AppConstants.DEBUG) {
return;
}
final Throwable t = AppConstants.DEBUG ? new Throwable() : null;
final StackTraceElement[] elements = t != null ? t.getStackTrace() : null;
String callerClassName = t != null ? elements[2].getClassName() : "N/A";
String callerMethodName = t != null ? elements[2].getMethodName() : "N/A";
int pos = callerClassName.lastIndexOf('.');
if (pos >= 0) {
callerClassName = callerClassName.substring(pos + 1);
}
final String tag = callerClassName;
final StringBuffer buf = new StringBuffer();
buf.append("[").append(callerMethodName).append("] ").append(msg); switch (level) {
case LEVEL_I:
Log.i(tag, buf.toString());
break;
case LEVEL_D:
Log.d(tag, buf.toString());
break;
case LEVEL_W:
Log.w(tag, buf.toString());
break;
case LEVEL_E:
Log.e(tag, buf.toString());
break;
default:
break;
}
try {
write(tag, buf.toString());
} catch (IOException e) {
e.printStackTrace();
}
} private static void write(String tag, String log) throws IOException {
String time = formatter.format(new Date(System.currentTimeMillis()));
String logger = time + ">>>>>" + tag + ">>>>>" + ">>>>>" + log + "\n\n";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File dir = Environment.getExternalStorageDirectory();
File file = new File(dir, FILEPATH);
if (!file.exists()) {
file.mkdirs();
}
FileOutputStream fos = new FileOutputStream(file + "/" + FILENAME, true);
fos.write(logger.getBytes());
fos.close();
}
}
}

Android sd卡log日志的更多相关文章

  1. Android SD卡创建文件和文件夹失败

    原文:Android SD卡创建文件和文件夹失败 功能需要,尝试在本地sd卡上创建文件和文件夹的时候,报错,程序崩溃. 一般情况下,是忘记给予sd卡的读写权限.但是这里面权限已经给了,还是报错. 在网 ...

  2. imx6 android SD卡启动

    工作中需要将imx6的android系统从SD卡启动,所以就分析了MfgTool中的脚本,分析android的分区情况,并尝试自己操作,竟然成功了,记录于此. 参考文档 http://www.kanc ...

  3. Android SD卡存储

    原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_SDcard_store.html 一 概念 SD卡存储空间比较大,当需要存取较大的 ...

  4. Android SD卡读写

    package com.jredu.zuiyou.activity; import android.os.Bundle;import android.os.Environment;import and ...

  5. Android——SD卡工具类——SDCardUtils.java

    package com.xdsjs.save.utils; /** * SD卡相关的辅助类 * Created by xdsjs on 2015/10/13. */ import java.io.Fi ...

  6. Android SD卡上文件

    1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...

  7. Android中对Log日志文件的分析[转]

    一,Bug出现了, 需要“干掉”它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你会看bug, a ...

  8. Android抓取log日志过滤

    前提:Android SDK已安装并配置环境变量 1.手机USB调试模式打开,连接PC 2.cmd窗口,执行adb logcat >log.log   // 输出日志到一个log文件 或者执行a ...

  9. Android Studio的Log日志调试

    本人菜鸟一枚,极大发挥了搜索的功能.现记录一番,以备后患. 用断点真的很烦,因为之前写linux的时候,就是用最蠢但是也是挺有帮助的printf()来进行调试. 其实用Log输出日志的原理也是差不多的 ...

随机推荐

  1. 装饰模式(Decorator Pattern)--------结构型模式

    装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为.装饰模式降低类系统的耦合度,可以动态地增加或删除对象的职责,并使得需要装饰的具体构件类和具体装饰类可以独立变化,以便增加新的具体构件 ...

  2. 【Ubuntu】录屏软件

    http://www.leesven.com/2378.html sudo apt-get install kazam

  3. 为tomcat指定JDK版本

    可以为tomcat指定JDK. 当系统中安装有多个版本的jdk时,可以为tomcat指定jdk版本. 在catalina.sh文件和setclasspath.sh文件开头的空白处加上如下一行: exp ...

  4. C#反射学习

    http://www.cnblogs.com/landeanfen/p/4642814.html http://blog.csdn.net/lianjiangwei/article/details/4 ...

  5. 让github忽略某些文件

    打开 https://github.com/github/gitignore 找到自己需要的android.gitignore 打开 Repository Settings , 把那些东东加进来,然后 ...

  6. mysql数据库中查看当前使用的数据库是哪个数据库?

    环境描述: mysql版本:5.5.57-log 操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago) 需求说明: 查看当前使用的 ...

  7. nginx 配置虚拟主机的三种方法

    nginx,一个server标签就是一个虚拟主机. 1.基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2.基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管 ...

  8. python的初始化运行了哪些?

    下面的3个print一个是在模块下面,一个是函数里面,一个是类名下面(不在方法里面) 1. 运行这段代码可以发现第3行和11行可以打印出来.第7行没有打印出来.所以可以放心,函数或者方法里面就算有错误 ...

  9. js中判断浏览器版本

    var ai = { ovb: { /** * 该对象用于判断系统,系统版本,浏览器,苹果设备等等功能.ovb是单词 Os Version Browser 的头字母缩写. */ _version_va ...

  10. 已知大小分别为m、n的两个无序数组A、B和一个常数c,求满足A[i]+B[j]=c的所有A[i]和B[j]

    方法一:枚举法.该方法是最容易.也是最简单的方法,枚举出数组A和数组B中所有的元素对,判断其和是否为c,如果是,则输出. 方法二:排序+二分查找法.首先,对两个数组中长度较大数组,不妨设为A,排序:然 ...