log日志应用 自定义的log

Posted 凤雏小呆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log日志应用 自定义的log相关的知识,希望对你有一定的参考价值。

package com.kxd.utils;

import java.util.Hashtable;

import android.util.Log;

/**
 * The class for print log
 * 
 */
public class MyLogger {
    private final static boolean logFlag = true; // 调试模式 true 上线模式 false

    public final static String tag = "远程银行";// 日志打印 tag
    private final static int logLevel = Log.VERBOSE; // 日志级别
    // 集合
    private static Hashtable<String, MyLogger> sLoggerTable = new Hashtable<String, MyLogger>();
    private String mClassName;

    // 不同开发人员的日志使用对象
    private static MyLogger djyLog;

    // 开发人员的名字
    private static final String DJY = "djy";

    private MyLogger(String name) {
        mClassName = name;
    }

    /**
     * 
     * @param className
     * @return
     */
    @SuppressWarnings("unused")
    private static MyLogger getLogger(String className) {
        MyLogger classLogger = (MyLogger) sLoggerTable.get(className);
        if (classLogger == null) {
            classLogger = new MyLogger(className);
            sLoggerTable.put(className, classLogger);
        }
        return classLogger;
    }

    /**
     * Purpose:Mark user djy
     * 
     * @return
     */
    public static MyLogger getDJYLog() {
        if (djyLog == null) {
            djyLog = new MyLogger(DJY);
        }
        return djyLog;
    }

    /**
     * Get The Current Function Name
     * 
     * @return
     */
    private String getFunctionName() {
        StackTraceElement[] sts = Thread.currentThread().getStackTrace();
        if (sts == null) {
            return null;
        }
        for (StackTraceElement st : sts) {
            if (st.isNativeMethod()) {
                // 本地方法native jni
                continue;
            }
            if (st.getClassName().equals(Thread.class.getName())) {
                // 线程
                continue;
            }
            if (st.getClassName().equals(this.getClass().getName())) {
                // 构造方法
                continue;
            }
            return mClassName + " [ 线程:" + Thread.currentThread().getName()
                    + " - 文件名: " + st.getFileName() + " - 行数:"
                    + st.getLineNumber() + " - 方法名:" + st.getMethodName()
                    + " ]";
        }
        return null;
    }

    /**
     * The Log Level:i
     * 
     * log等级:i
     * 
     * @param str
     */
    public void i(Object str) {
        if (logFlag) {
            if (logLevel <= Log.INFO) {
                String name = getFunctionName();
                if (name != null) {
                    Log.i(tag, name + " - " + str);
                } else {
                    Log.i(tag, str.toString());
                }
            }
        }

    }

    /**
     * The Log Level:i
     * 
     * log等级:i
     * 
     * @param str
     */
    public void i(String tag, Object str) {
        if (logFlag) {
            if (logLevel <= Log.INFO) {
                String name = getFunctionName();
                if (name != null) {
                    Log.i(tag, name + " - " + str);
                } else {
                    Log.i(tag, str.toString());
                }
            }
        }

    }

    /**
     * The Log Level:d
     * 
     * log等级:d
     * 
     * @param str
     */
    public void d(Object str) {
        if (logFlag) {
            if (logLevel <= Log.DEBUG) {
                String name = getFunctionName();
                if (name != null) {
                    Log.d(tag, name + " - " + str);
                } else {
                    Log.d(tag, str.toString());
                }
            }
        }
    }

    /**
     * The Log Level:V
     * 
     * log等级:v
     * 
     * @param str
     */
    public void v(Object str) {
        if (logFlag) {
            if (logLevel <= Log.VERBOSE) {
                String name = getFunctionName();
                if (name != null) {
                    Log.v(tag, name + " - " + str);
                } else {
                    Log.v(tag, str.toString());
                }
            }
        }
    }

    /**
     * The Log Level:w
     * 
     * log等级:w
     * 
     * @param str
     */
    public void w(Object str) {
        if (logFlag) {
            if (logLevel <= Log.WARN) {
                String name = getFunctionName();
                if (name != null) {
                    Log.w(tag, name + " - " + str);
                } else {
                    Log.w(tag, str.toString());
                }
            }
        }
    }

    /**
     * The Log Level:e
     * 
     * log等级:e
     * 
     * @param str
     */
    public void e(Object str) {
        if (logFlag) {
            if (logLevel <= Log.ERROR) {
                String name = getFunctionName();
                if (name != null) {
                    Log.e(tag, name + " - " + str);
                } else {
                    Log.e(tag, str.toString());
                }
            }
        }
    }

    /**
     * The Log Level:e
     * 
     * log等级:e
     * 
     * @param ex
     */
    public void e(Exception ex) {
        if (logFlag) {
            if (logLevel <= Log.ERROR) {
                Log.e(tag, "error", ex);
            }
        }
    }

    /**
     * The Log Level:e
     * 
     * log等级:e
     * 
     * @param log
     * @param tr
     */
    public void e(String log, Throwable tr) {
        if (logFlag) {
            String line = getFunctionName();
            Log.e(tag, "{Thread:" + Thread.currentThread().getName() + "}"
                    + "[" + mClassName + line + ":] " + log + "\n", tr);
        }
    }
}

 

以上是关于log日志应用 自定义的log的主要内容,如果未能解决你的问题,请参考以下文章

vs code 自定义代码片段

小玩意--自定义log记录

MyBatis应用开发日志之自定义日志实现

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

log4j2自定义Appender(输出到文件/RPC服务中)

自定义log4j日志级别