Android log 方法
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 方法的更多相关文章
- 在非NDK编译条件下使用Android Log函数
解决的需求 有些时候不能在NDK环境编译,或者使用NDK编译会颇费周折,然后又想使用Android系统自带的Log类方法,那么我们就可以使用dlopen来实现我们的目的.比如在OpenCV中添加And ...
- android JNI常用添加log方法
android JNI 打log方法 添加库支持 LOCAL_LDLIBS :=-llog -landroid 包含头文件 #include <android/log.h> #define ...
- android log机制——输出log【转】
转自:http://blog.csdn.net/tdstds/article/details/19084327 目录(?)[-] 在android Java code中输出log Logprintln ...
- android Log.isLoggable步骤的使用
原文地址: http://www.cnblogs.com/maxinliang/p/4024442.html android Log.isLoggable方法的使用 android 动态控制logca ...
- android语音识别方法
http://www.apkbus.com/forum.php?mod=viewthread&tid=3473 android语音识别方法一:使用intent调用语音识别程序 1. 说明 以下 ...
- 蓝牙ble数据转语音实现Android AudioRecord方法推荐
蓝牙ble数据转语音实现Android AudioRecord方法推荐 教程 欢迎走进zozo的学习之旅. 概述 蓝牙BLE又称bluetooth smart,主打的是低功耗和快速链接,所以在支持的 ...
- 转:Android Log
在调试代码的时候我们需要查看调试信息,那我们就需要用Android Log类. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以 ...
- Android Stuido 方法参数 p0,p1
Android Stuido 方法参数 p0,p1 参考文献 https://stackoverflow.com/questions/49219439/incorrect-variable-names ...
- java web 程序---内置对象application的log方法的使用
application的主要方法里,有log方法,是日志文件里可以查看到信息的. 当老师写好代码后,他发现在tomact里的log目录下找不到信息,原因是:我们用myeclipse这个客户端软件,应该 ...
随机推荐
- .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统
.NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...
- Spring 中配置log4j日志功能
一,添加log4j依赖包 可从官网上下载该依赖包log4j-x.x.xx.jar,下载后 build path,添加依赖包 二,创建 log4j.properties 配置文件 log4j.prope ...
- devstack 安装(centos7)
1. 创建devstack用户 sudo useradd -s /bin/bash -d /opt/stack -m stackecho "stack ALL=(ALL) NOPASSWD: ...
- shell脚本之特殊符号总结性梳理
# 井号 (comments) 这几乎是个满场都有的符号#!/bin/bash 井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行. # This line ...
- D. Boxes Packing
链接 [http://codeforces.com/contest/1066/problem/D] 题意 题目大意 n个物品m个篮子每个篮子容量为k 每个物品重量为a[i] 问能装多少物品 这个人是强 ...
- c#代码分析
代码分析是在一个IT行业计算机程序员必须要具有的基本专业技能,在了解一定的专业基础之上去看懂别人编写的代码,分析别人代码实现的功能,以及基本的维护和扩展测试.不同的人有不同的代码风格,要使自己的能要别 ...
- 《Linux内核设计与实现》第三章学习笔记
第三章 进程管理 姓名:王玮怡 学号:20135116 一.进程 1.进程的含义 进程是处于执行期的程序以及相关资源的总称,程序本身并不是进程,实际上就是正在执行的代码的实时结果.Linux内核通 ...
- Linux内核读书笔记第三周 调试
内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...
- shiro课程的学习
1.shiro的课程目标 (1)shiro的整体框架 各组件的概念 (2)shiro 认证 授权的过程 (3)shiro自定义的Reaml Filter (4)shiro session 管理 (5) ...
- NullPointerException-----开发中遇到的空指针异常
1.使用CollectionUtils.isEmpty判断空集合 public class TestIsEmpty { static class Person{} static class Girl ...