package test;
public abstract class Logger {
private static Class<? extends Logger> mLoggerClass = null;
public static final boolean DBG = true;
public static final String TAG = null;
public static final String LINE = "------->"; private String mTag; public Logger() {
} public Logger(String tag) {
this.mTag = tag;
} public static void registerLogger(Class<? extends Logger> loggerClass) {
Logger.mLoggerClass = loggerClass;
} public static void unregisterLogger() {
Logger.mLoggerClass = null;
} public static Logger getLogger(String tag) {
tag = "[" + tag + "]";
Logger logger = null;
if (mLoggerClass != null) {
try {
logger = mLoggerClass.newInstance();
logger.mTag = tag;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
if (logger == null) {
logger = new Log(tag);
}
return logger;
} public String getTag() {
return mTag;
} public void d(String tag, String str) {
debug(mTag + LINE + str);
} public void i(String tag, String str) {
info(mTag + LINE + str);
} public void w(String tag, String str) {
warn(mTag + LINE + str);
} public void e(String tag, String str) {
error(mTag + LINE + str);
} public void d(String tag, String str, Throwable tr) {
debug(mTag + LINE + str, tr);
} public void i(String tag, String str, Throwable tr) {
info(mTag + LINE + str, tr);
} public void w(String tag, String str, Throwable tr) {
warn(mTag + LINE + str, tr);
} public void e(String tag, String str, Throwable tr) {
error(mTag + LINE + str, tr);
} protected abstract void debug(String str); protected abstract void info(String str); protected abstract void warn(String str); protected abstract void error(String str); protected abstract void debug(String str, Throwable tr); protected abstract void info(String str, Throwable tr); protected abstract void warn(String str, Throwable tr); protected abstract void error(String str, Throwable tr);
}
package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Date; import android.os.Environment; public class Log extends Logger { private static final String APP_TAG = "renwuto";
private static final String LOG_FILE_NAME = "renwuto.txt";
private static PrintStream logStream;
private static final String LOG_ENTRY_FORMAT = "[%tF %tT]%s"; public Log(String name) {
super(name);
} @Override
protected void debug(String str) {
android.util.Log.d(APP_TAG, str);
write(str, null);
} @Override
protected void error(String str) {
android.util.Log.e(APP_TAG, str);
write(str, null);
} @Override
protected void info(String str) {
android.util.Log.i(APP_TAG, str);
write(str, null);
} @Override
protected void warn(String str) {
android.util.Log.w(APP_TAG, str);
write(str, null);
} @Override
protected void debug(String str, Throwable tr) {
android.util.Log.d(APP_TAG, str);
write(str, tr);
} @Override
protected void error(String str, Throwable tr) {
android.util.Log.e(APP_TAG, str);
write(str, tr);
} @Override
protected void info(String str, Throwable tr) {
android.util.Log.i(APP_TAG, str);
write(str, tr);
} @Override
protected void warn(String str, Throwable tr) {
android.util.Log.w(APP_TAG, str);
write(str, tr);
} private void write(String msg, Throwable tr) {
if (!Log.DBG) {
return;
}
try { if (null == logStream) {
synchronized (Log.class) {
if (null == logStream) {
init();
}
}
} Date now = new Date();
if (null != logStream) {
logStream.printf(LOG_ENTRY_FORMAT, now, now, msg);
logStream.print("\n");
}
if (null != tr) {
tr.printStackTrace(logStream);
if (null != logStream) {
logStream.print("\n");
}
} } catch (Throwable t) {
// Empty catch block
}
} public static void init() {
if (!Log.DBG) {
return;
}
try {
File sdRoot = null;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
sdRoot = Environment.getExternalStorageDirectory();
}
if (sdRoot != null) {
File logFile = new File(sdRoot, LOG_FILE_NAME); android.util.Log.d(APP_TAG, "Log to file : " + logFile);
logStream = new PrintStream(new FileOutputStream(logFile, true), true);
}
} catch (Throwable e) {
// Empty catch block
}
} @Override
protected void finalize() throws Throwable {
try {
super.finalize();
if (logStream != null) {
logStream.close();
}
} catch (Throwable t) {
// Empty catch block
}
}
}

使用:

private static final Logger log = Logger.getLogger("DownloadThread");

log.e("xxxx", "=============network data end");

Android log 方法的更多相关文章

  1. 在非NDK编译条件下使用Android Log函数

    解决的需求 有些时候不能在NDK环境编译,或者使用NDK编译会颇费周折,然后又想使用Android系统自带的Log类方法,那么我们就可以使用dlopen来实现我们的目的.比如在OpenCV中添加And ...

  2. android JNI常用添加log方法

    android JNI 打log方法 添加库支持 LOCAL_LDLIBS :=-llog -landroid 包含头文件 #include <android/log.h> #define ...

  3. android log机制——输出log【转】

    转自:http://blog.csdn.net/tdstds/article/details/19084327 目录(?)[-] 在android Java code中输出log Logprintln ...

  4. android Log.isLoggable步骤的使用

    原文地址: http://www.cnblogs.com/maxinliang/p/4024442.html android Log.isLoggable方法的使用 android 动态控制logca ...

  5. android语音识别方法

    http://www.apkbus.com/forum.php?mod=viewthread&tid=3473 android语音识别方法一:使用intent调用语音识别程序 1. 说明 以下 ...

  6. 蓝牙ble数据转语音实现Android AudioRecord方法推荐

    蓝牙ble数据转语音实现Android AudioRecord方法推荐 教程  欢迎走进zozo的学习之旅. 概述 蓝牙BLE又称bluetooth smart,主打的是低功耗和快速链接,所以在支持的 ...

  7. 转:Android Log

    在调试代码的时候我们需要查看调试信息,那我们就需要用Android Log类. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以 ...

  8. Android Stuido 方法参数 p0,p1

    Android Stuido 方法参数 p0,p1 参考文献 https://stackoverflow.com/questions/49219439/incorrect-variable-names ...

  9. java web 程序---内置对象application的log方法的使用

    application的主要方法里,有log方法,是日志文件里可以查看到信息的. 当老师写好代码后,他发现在tomact里的log目录下找不到信息,原因是:我们用myeclipse这个客户端软件,应该 ...

随机推荐

  1. 移动端自动化测试-WTF Appium?

    手机App分为两大类,原生App(Native App)和混合APP(Hybrid App) 原生App(Native App) 原生App实际就是我们所常见的传统App开发模式,云端数据存储+App ...

  2. UWP简单示例(二):快速开始你的3D编程

    准备 IDE:Visual Studio 开源库:GitHub.SharpDx 入门示例:SharpDX_D3D12HelloWorld 为什么选择 SharpDx? SharpDx 库与 UWP 兼 ...

  3. nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理

    Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能 ...

  4. SQL中not in 和not exists

    在SQL中倒是经常会用到子查询,而说到子查询,一般用的是in而不是exists,先不谈效率问题,就先说说会遇到哪些问题. 用到in当取反的时候,肯定先想到的就是not in.但是在使用not in的时 ...

  5. CF 1047 C. Enlarge GCD

    传送门 [http://codeforces.com/contest/1047/problem/C] 题意 给你n个数,移除最少的数字使剩下的数字GCD大于初始GCD 思路 需要一点暴力的技巧,先求出 ...

  6. #个人博客作业week2——关于代码规范的个人观点

    对于这一讨论的前提我们首先要知道什么是代码规范. 在这个问题上我同意一篇参考文章的观点——代码规范不仅只编码风格.编码风格仅是代码规范的一个方面,除了编码风格,代码规范还包括函数返回值等其他方面.在我 ...

  7. 《Linux内核设计与实现》读书笔记三

    Chapter 18 调 试 18.1 准备开始 1.准备工作: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 2.执行foo就会让程序立即产生核心信息转储(dump core). ...

  8. Java 编码规范 StandardCharsets.UTF_8 三个方法 toString() name() displayName(),到底用哪个方法更合适?

    想用StandardCharsets.UTF_8 返回"UTF-8"这个字符,测试一下,三个方法toString() name() displayName(),均能返回" ...

  9. 通过Oracle DUMP 文件获取表的创建语句

    1. 有了dump文件之后 想获取表的创建语句. 之前一直不知道 dump文件能够直接解析文件. 今天学习了下 需要的材料. dump文件, dump文件对应的schema和用户. 以及一个版本合适的 ...

  10. linux 终端快捷操作

    终端一些常用快捷键 按键 作用 Ctrl+d 键盘输入结束或退出终端 Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行 Ctrl+z 将当前程序放到后台运行,jobs命令查看后台工作,命令&quo ...