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. C#大型电商项目优化(二)——嫌弃EF与抛弃EF

    上一篇博文中讲述了使用EF开发电商项目的代码基础篇,提到EF后,一语激起千层浪.不少园友纷纷表示:EF不适合增长速度飞快的互联网项目,EF只适合企业级应用等等. 也有部分高手提到了分布式,确实,性能优 ...

  2. RetrieveFavicon 获取任何站点的 favicon

    原文发表于我的技术博客 开源了一个获取任何站点 favicon 的类库,供使用. 原文发表于我的技术博客 RetrieveFavicon Project GitHub Retrieve favicon ...

  3. php5.6安装Zend Opcache扩展

    假设php5.6安装路径为/data2/php[root@nextcloud src]# pwd/usr/local/src[root@nextcloud src]# wget http://pecl ...

  4. C#改变图片大小

    今天一女同事要做一个改变图片大小的功能,然后我就手写了几行代码,以后可能用得上 byte[] buffer = new byte[1]; //Byte转为Image对象 MemoryStream ms ...

  5. PAT 1057 数零壹

    https://pintia.cn/problem-sets/994805260223102976/problems/994805270914383872 给定一串长度不超过 10​5​​ 的字符串, ...

  6. CRM 数据查重

    2.8 小工具 · 纷享销客产品手册https://www.fxiaoke.com/mob/guide/crmdoc/src/2-8%E5%B0%8F%E5%B7%A5%E5%85%B7.html C ...

  7. Spring框架最简单的定时任务调用

    package org.jeecgframework.core.timer; import org.springframework.scheduling.annotation.Scheduled; i ...

  8. [CB]2018全球半导体营收4700亿美元 三星继续碾压英特尔

    2018全球半导体营收4700亿美元 三星继续碾压英特尔 https://www.cnbeta.com/articles/tech/808833.htm Gartner最新报告显示,2018年全球半导 ...

  9. centos7黑客帝国装逼

    黑客帝国既视感 搜 cmatrix 然后放到本地解压缩 ,安装 yum install ncurses-devel./configure && make && make ...

  10. 《mysql从入门到精通》提高

    第一 游标的使用 delimiter $$ DROP PROCEDURE IF EXISTS product_in_sheet_handler; CREATE PROCEDURE product_in ...