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
        }
    }
}
时间: 2024-10-08 05:14:43

Android log 方法的相关文章

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

解决的需求 有些时候不能在NDK环境编译,或者使用NDK编译会颇费周折,然后又想使用Android系统自带的Log类方法,那么我们就可以使用dlopen来实现我们的目的.比如在OpenCV中添加Android的Log打印. 关于dlopen dlopen和dlclose对处理的lib进行引用计数,dlopen使引用计数加1,dlclose让引用计数减1,当对库的引用计数达到0的时候,才会把库unmap掉. dlsym返回查找到的第一个符合要求的函数地址,该地址指的是库加载进进程虚拟地址. 可以使

Log中&#39;main&#39;, &#39;system&#39;, &#39;radio&#39;, &#39;events&#39;以及android log分析

在Android中不同的log写到不同的设备中,共有/dev/log/system, /dev/log/main, /dev/log/radion, /dev/log/events四中类型.其中默认Log.v等写入/dev/log/main中.Slog写入/dev/log/system中. 我们在使用logcat 抓去日至的时候, 可以指定buffer,来请求不同的环形缓冲区 ('main', 'system', 'radio', 'events',默认为"-b main -b system&q

android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR. 1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时

Android log系统 转

Android log系统 light 2011/11/20 Android 系统log抓取,实现原理分析   一 概述 本文档主要是供Android开发人员使用,特别是Framework开发.因为Framework中95%以上的问题都是靠分析log解决的,所以开发人员必须对android整个log系统十分清楚.什么问题抓什么log, 使用什么工具抓Log,如何分析log, 如何在代码中添加log. 二DDMS log 关于ddms是如何工作的和ddms的详细功能,见下面android sdk中

Android Log介绍

android.util.Log常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w() ,Log.e() .按照日志级别从高到低为ERROR, WARN, INFO, DEBUG, VERBOSE.至于日志级别本身的含义,相信用过Apache Log4j,Apache LogFactory的人都明白,此处不再描述. 1.下面是对各种日志级别的输出介绍: 1.Log.v 的输出颜色为黑色的,输出大于或等于VERBOSE日志级别的信息 2.Log.d的输出颜色是蓝

android Log.isLoggable步骤的使用

android Log.isLoggable方法的使用 android 动态控制logcat日志开关,通过Log.isLoggable(TAG,level)方法动态控制,1.添加日志的时候加入判断,        String TAG="Volley";        boolean isDbug=Log.isLoggable(TAG, Log.VERBOSE);        if (isDbug) {            Log.w(TAG, "log"); 

android log 日志的输出总结

android log 在不同层使用不同方法. 1.如果是在Native 代码(hal 和 jni)中使用本地方法 头文件:  #include <utils/Log.h> 方法:          VERBOSE LOGV(): DEBUG     LOGD(); INFO         LOGI(); WARN        LOGW(); ERROR      LOGE(); 例子:   LOGD("%s, %d",  s, n) ; 2.如果是在framework

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

蓝牙ble数据转语音实现Android AudioRecord方法推荐 教程 欢迎走进zozo的学习之旅. 概述 蓝牙BLE又称bluetooth smart,主打的是低功耗和快速链接,所以在支持的profile并没有audio的部分,而蓝牙语音协议A2DP只在传统蓝牙中有,本文就是提供一种利用ble数据来传输压缩语音,并最终在实现用android语音框架中的AudioRecord方法来获取语音流. 主要思路 首先问题的需求是从一种非标准的协议挂载成为一个标准协议.那通过修改kernel的blu

关于 Android Dex 方法限制的一些总结

原文地址:http://greenrobot.me/devpost/about-android-dex-method-number-limit/ Android的编译过程 在了解这个问题之前我们先要来看看Android 应用编译的过程: IDE中的资源打包工具 (Android Asset Packaging Tool ,即图中的aapt) 会将应用中的资源文件进行编译,这些资源文件包括 AndroidManifest.xml文件,为Activity定义的 XML 文件等等.在这个编译过程中也会