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. 用pip批量更新所有包

    p.s在先,事实证明,把电脑里所有的python包一次性更新是吃力不讨好的工作,不过,这是另一回事,如果你一定要这么做,根据http://stackoverflow.com/questions/272 ...

  2. MySQL死锁分析

    死锁问题背景 做MySQL代码的深入分析也有些年头了,再加上自己10年左右的数据库内核研发经验,自认为对于MySQL/InnoDB的加锁实现了如指掌,正因如此,前段时间,还专门写了一篇洋洋洒洒的文章, ...

  3. p12证书转keystore签名

    java https://my.oschina.net/u/555639/blog/524821   AIR p12转keystore证书签名apk 2014年01月03日 ⁄ 移动探索 ⁄ 评论数 ...

  4. UGUI表情系统解决方案

    参考链接: https://blog.uwa4d.com/archives/Sparkle_UGUI.html http://tech.seasungame.com/blog/index.php/20 ...

  5. python登录网易163邮箱,爬取邮件

    from common import MyRequests,LoggerUntil,handle_exception myRequests.update_headers({ 'Accept':'tex ...

  6. 测试amqplib实例,报错 Error: connect ECONNREFUSED 127.0.0.1:5672

    研究消息队列处理库amqplib(https://www.npmjs.com/package/amqplib)时,把实例直接拿过来运行的时候报错如下 不知道为什么会出这样的问题,后来跑到github上 ...

  7. 【安全开发】C/C++安全编码规范

    C本质上是不安全的编程语言.例如如果不谨慎使用的话,其大多数标准的字符串库函数有可能被用来进行缓冲区攻击或者格式字符串攻击.但是,由于其灵活性.快速和相对容易掌握,它是一个广泛使用的编程语言.下面是针 ...

  8. SimpleDateFormat 取当前周的周一和周日的日期,当前月第一个和最后一天的日期

    /** * 类说明 :以及获取当前周的周一和周日的日期,当前月第一个和最后一天的日期 * 日期格式化:格式参数  G 年代标志符  y 年 M 月 d 日    h 时 在上午或下午 (1~12)  ...

  9. PHP中$_SERVER的详细用法

    PHP中$_SERVER的详细用法 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. ...

  10. Makefile 中all 和.PHONY的作用

    请编写一个makefile同时编译.链接下面两个程序: main1.c: #include<stdio.h> int main(void) { printf("main1\n&q ...