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. 案例学python——案例二:连接数据库MySql

    调侃的话:案例一跑完之后,欣赏把玩了一番.人就有点飘飘然,昨天除了做饭吃饭,就是玩三国杀,江郎才尽,今天周一,不飘了,敲点代码,看看Python操作数据库有啥不一样的. 前期准备: 1.数据库 电脑上 ...

  2. REST-framework快速构建API--分页

    分页简介 当数据量特别大的时候,我们通过API获取数据会非常慢,所以此时我们需要将数据"分批次"取出来,这里的"分批次"就是,分页! REST框架支持自定义分页 ...

  3. Bash 笔记

    获取当前工作目录 basepath=$(cd `dirname $0`; pwd) 源文 : https://sexywp.com/bash-how-to-get-the-basepath-of-cu ...

  4. ssh登陆服务器locale告警(-bash: warning: setlocale:)的处理方法

    使用ssh远程登陆 IDC机房服务器,发现老是出现如下告警信息: -bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UT ...

  5. UPC-5063-二分图最大匹配

    好吧二分图的最小点覆盖=最大匹配 这道题也就变成模板题了... 写一个提醒,在写二分图时,尽量清零操作清空为-1,比如这个题,匹配数组girl[]如果清空为0,代表每个点都与0点连接,但是实际上是并没 ...

  6. 《Linux内核》第七周 进程的切换和系统的一般执行过程 20135311傅冬菁

    进程的切换和系统的一般执行过程 一.内容总结与分析 进程调度与进程调度时机 进程调度需求的分类: 第一种分类方式: I/O -bound(频繁进行I/O,通常会花很多时间等待I/O操作) CPU-bo ...

  7. 使用git命令创建分支到团队项目

    背景 在我们的团队中,我作为管理者,创建了一个叫HelloWorld的项目,大家各自在本地进行开发,将自己的工作贡献到我们的团队项目中.为了便于审核,我希望大家先将自己的贡献先放在属于自己的一个分支上 ...

  8. LeetCode 363:Max Sum of Rectangle No Larger Than K

    题目链接 链接:https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/description/ 题解&代码 1 ...

  9. 【论文笔记】Domain Adaptation via Transfer Component Analysis

    论文题目:<Domain Adaptation via Transfer Component Analysis> 论文作者:Sinno Jialin Pan, Ivor W. Tsang, ...

  10. java基础知识点罗列

    1:Java泛型 2:clone Java中的深拷贝(深复制)和浅拷贝(浅复制)   Java中对Clone的理解  序列化和反序列化的概念 3:Java中有关Null的9件事