Android开发日志统一管理

在开发中,我们通常要对日志的输出做统一管理,下面就为大家推荐一个日志输出类,在开发阶段只需将DEBUG常量设为true,生产环境将DEBUG设为false即可控制日志的输出。啥都不说了,需要的朋友直接带走。

package com.android.util;

/**
 * 日志输出统一管理
 *
 * @author 祁连山
 * @date 2015-04-27
 * @version 1.0
 *
 */
public class Log {

    private static final String TAG = "com.android.app";
    private static final boolean DEBUG = true;

    private static String getFunctionName() {
        StackTraceElement[] sts = Thread.currentThread().getStackTrace();
        if (sts == null) {
            return null;
        }
        for (StackTraceElement st : sts) {
            if (st.isNativeMethod()) {
                continue;
            }
            if (st.getClassName().equals(Thread.class.getName())) {
                continue;
            }
            if (st.getClassName().equals(Log.class.getName())) {
                continue;
            }
            return "[" + Thread.currentThread().getName() + "(" + Thread.currentThread().getId() + "): " + st.getFileName() + ":" + st.getLineNumber() + "]";
        }
        return null;
    }

    private static String createMessage(String msg) {
        String functionName = getFunctionName();
        String message = (functionName == null ? msg : (functionName + " - " + msg));
        return message;
    }

    public static void i(String msg) {
        if (DEBUG) {
            String message = createMessage(msg);
            android.util.Log.i(TAG, message);
        }
    }

    public static void v(String msg) {
        if (DEBUG) {
            String message = createMessage(msg);
            android.util.Log.v(TAG, message);
        }
    }

    public static void d(String msg) {
        if (DEBUG) {
            String message = createMessage(msg);
            android.util.Log.d(TAG, message);
        }
    }

    public static void e(String msg) {
        if (DEBUG) {
            String message = createMessage(msg);
            android.util.Log.e(TAG, message);
        }
    }

    public static void w(String msg) {
        if (DEBUG) {
            String message = createMessage(msg);
            android.util.Log.w(TAG, message);
        }
    }

    public static void e(Exception e) {
        if (DEBUG) {
            StringBuffer sb = new StringBuffer();
            String name = getFunctionName();
            StackTraceElement[] sts = e.getStackTrace();

            if (name != null) {
                sb.append(name + " - " + e + "\r\n");
            } else {
                sb.append(e + "\r\n");
            }
            if (sts != null && sts.length > 0) {
                for (StackTraceElement st : sts) {
                    if (st != null) {
                        sb.append("[ " + st.getFileName() + ":" + st.getLineNumber() + " ]\r\n");
                    }
                }
            }
            android.util.Log.e(TAG, sb.toString());
        }
    }
}
时间: 2024-10-09 20:55:55

Android开发日志统一管理的相关文章

玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理

背景 在分布式系统中,我们有多个web app,这些web app可能分别部署在不同的物理服务器上,并且有各自的日志输出.当生产问题来临时,很多时候都需要去各个日志文件中查找可能的异常,相当耗费人力.日志存储多以文本文件形式存在,当有需求需要对日志进行分析挖掘时,这个处理起来也是诸多不便,而且效率低下. 为了方便对这些日志进行统一管理和分析,我们可以将日志统一输出到指定的数据库系统中,再由日志分析系统去管理.由于这里是mongodb的篇章,所以主观上以mongodb来做日志数据存储:客观上,一是

Android 开发版本统一

一.概述 对于 Android 开发版本的统一涉及到的东西就是 Gradle 中的全局设置,我们通过配置 gradle 也就是编写 Groovy 代码将开发中的版本号设置为全局参数.这样就能够在 module 或者 library 中访问同一份版本号,从而实现统一.Gradle 中的全局设置方式有以下几种: 工程 build.gradle ext方法 gradle.properties文件 -p参数 二.全局设置 1. 工程 build.gradle allprojects { apply pl

Android开发之内存管理

概念 应用的开发离不开存储,存储分为网络.内存.SDCard文件存储以及外部SDCard2文件存储,开发中一定要注意好内存管理以免oom.卡顿等不好的用户体验,同时还要注意变量的回收,避免内存泄漏.下面呢先来了解一些基本的相关专业术语. RAM(random access memory)随机存取存储器即内存 寄存器(Registers):速度最快的存储场所,因为寄存器位于处理器内部,我们在程序中无法控制 栈(Stack):存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆

linux服务器远程日志统一管理

远程日志配置 1.服务端 (1)编辑日志文件   vim /etc/rsyslog.conf //重启日志服务   /etc/init.d/rsyslog restart (2)在/usr/share/doc/rsyslog-5.8.10/下递归寻找所有包含fromhost信息的文件 grep -r fromhost /usr/share/doc/rsyslog-5.8.10/ (3)在存放自己日志文件的目录下创建一个名字将并已复制路径ip粘贴过来vim /etc/rsyslog.d/feiyu

Android开发日志4——如何解决no CPU/ABI system image available for this target

真是个马大哈呀 问题如下: 1.在Tools里面,在extra里面选择安装Intel x86 Emulator Accelerator 2.下载相应API版本的X86 Atom System Image,我为了以后省事选上了所有能选的...如下图: 如果还不行的话: 3.在adt-bundle-windows-x86\sdk\extras\intel\Hardware_Accelerated_Execution_Manager目录下面去安装这个exe文件 然后在创建AVD的时候就可选了.

android 开发日志- eclipse在android侠的基本应用

andriod中如果引入jar包的方式不对就会出现一些奇怪的错误. 工作的时候恰好有一个jar包需要调用,结果用了很长时间才解决出现的bug. 刚开始是这样引用的(eclipse): 右键工程,Build path,java build path, 选择libraries,在右边的按钮中点击"Add External JARs", 然后选择合适的jar包(大部分人应该会这样做). 结果控制台立刻报错:conversion to dalvik format failed with err

旗鱼移动Android开发规范

撰写:     旗鱼移动Android开发组 旗鱼移动科技有限公司所属,未经允许不得私自传播 第1版 2016年 5 月 3 日 目录 一.Android开发框架 二.命名规范 2.1 包(packages)命名规范 2.2 类(classes)命名规范 2.3 方法(methods) 2.4 变量(variables) 2.5 常量(Constants) 2.6 资源文件(图片drawable文件夹下) 2.7 资源布局文件(XML文件(layout布局文件)) 2.8 资源布局文件(layo

Android开发环境搭建(windows OS)之补充

这几天搭建了个安卓开发环境,也想玩玩安卓开发.在查询CSDN,CNBLOG,视频网站之后终于把开发环境搭建起来了,发现所有的指导都比较离散,比如有些只说安装方法,有些只说下载方法.本文来个集大成,算是对网络资源的整合.另外补充一句,我这里可能只写一种,只是抛个砖头,方法可以很多,欢迎补充~~~ 1 准备:了解Android系统架构和基本安装方法介绍 做事前,得弄明白做事的目的和背景,大概就可以.Android系统背景很容易找,推荐百度百科就行,也可以参考一些官网视频介绍或高手撰文介绍.不需要都看

Android 开发工具类 10_Toast 统一管理类

Toast 统一管理类: 1.短时间显示Toast: 2.长时间显示 Toast: 3.自定义显示 Toast 时间. 1 import android.content.Context; 2 import android.widget.Toast; 3 4 // Toast 统一管理类 5 public class T 6 { 7 8 private T() 9 { 10 /* cannot be instantiated */ 11 throw new UnsupportedOperation