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);
        }
    }
}
时间: 2024-10-12 19:50:05

log日志应用 自定义的log的相关文章

Spring Boot Log 日志使用教程

我们编写任何 Spring Boot 程序,可能绕不开的就是 log 日志框架(组件). 在大多数程序员眼中日志是用来定位问题的.这很重要. 本项目源码下载 注意本项目提供的源码已在后期重新编写,有部分日期描述不一致. 如果你只是想知道 Spring boot log 如何使用,请直接观看 3.2 使用 Spring Boot Logback 1 Log 日志概述 1.1 Log 日志组件能干什么 日志能干的事情很多,对于学习程序,测试的工程师来说,日志能够定位问题,解决问题,是最大的功能点.

scrapy框架【log日志】

scrapy中的debug信息 在scrapy中设置log 1.在settings中设置log级别,在settings.py中添加一行: Scrapy提供5层logging级别: CRITICAL - 严重错误(critical) ERROR - 一般错误(regular errors) WARNING - 警告信息(warning messages) INFO - 一般信息(informational messages) DEBUG - 调试信息(debugging messages) scr

捕获异常、存sd卡、封装请求头体、加密map值、网络工具类、生成Json、Https协议、传log日志到服务器、app崩溃友好重启

点击打开链接,免积分下载 在集成了统计SDK(友盟统计,百度统计等)之后,有一个非常有利于测试的功能:错误分析!此功能能够将程序在运行中碰到的崩溃(runtimeException)问题反馈到服务器,帮助开发者改善产品,多适配机器.然而在公司android开发中不集成这些SDK,那应该怎么实现这样的功能呢?下面让我们来看下如何使用UncaughtExceptionHandler来捕获异常. 在Android开发中,常常会出现uncheched Exception 导致程序的crash,为了提供良

构建企业日志实时查看系统log.io

软件介绍: log.io 是一个实时日志监控工具,采用 node.js + socket.io 开发,使用浏览器访问,每秒可以处理超过5000条日志变动消息.有一点要指出来的是 log.io 只监视日志变动并不存储日志,和其他的监控工具一样,log.io 也采用服务器-客户端的模式.log.io 由两部分组成:server 和 harvester, server 运行在机器 A(服务器)上监视和纪录其他机器发来的日志消息:log harvester 运行在机器 B(客户端)上用来监听和收集机器

Go语言之log日志

在我们开发程序后,如果有一些问题需要对程序进行调试的时候,日志是必不可少的,这是我们分析程序问题常用的手段. 日志使用 日志分析,就是根据输出的日志信息,分析挖掘可能的问题,我们使用fmt.Println系列函数也可以达到目的,因为它们也可以把我们需要的信息输出到终端或者其他文件中.不过fmt.Println系列函数输出的系统比较简单,比如没有时间,也没有源代码的行数等,对于我们排查问题,缺少了很多信息. 对此,Go语言为我们提供了标准的log包,来跟踪日志的记录.下面我们看看日志包log的使用

log日志重定向

1.重定向: 我们在使用NSLog(@"hahaha") 时,实质是将"hahaha"写入到一个系统默认位置的log文件中,然后控制台通过实时获取这个文件的内容进行显示打印信息. 但有时我们希望不需要链接xcode在手机上直接查看日志信息,这个时候我们就需要将log日志的位置调整到我们想要的指定位置. 好处: 这样调整的好处是我们可以自定义一个textview来读取log日志内容,通过某种方式触发(比如摇晃),来将实时的日志直接像是到手机上. 也可以通过后台接口上传

【Spring Boot 官方文档】26、Log日志

简介: Spring Boot所有内部日志使用Apache的Commons Logging组件,同时也开放了底层的日志实现. Spring Boot为3种日志组件Java Util Logging,Log4J2,Logback提供了默认配置,而且为每一种预设了控制台输出,并提供文件输出可选. 如果使用Spring Boot的starters组件,默认使用Logback组件. Spring Boot提供了适当的Logback路由,以保证依赖库使用Java Util Logging, Commons

.NET CORE搭建Log日志

原文出自https://www.cnblogs.com/AprilBlank/p/11282345.html 非常感谢. 1.工具->NuGet包管理器->管理解决方案的NuGet程序包 找到log4net下载 2.在Startup.cs中配置注入 public Startup(IConfiguration configuration) { Configuration = configuration; repository = LogManager.CreateRepository("

翻译日志缓存(The log cache)

日志缓存(The log cache) 节译自:Microsoft SQL Server 2012 Internals P177(译注:本节是2012版本新增) 就像数据页在写入磁盘之前会先写入数据缓存(data cache)一样,SQL Server会在物理写入磁盘之前先缓存日志记录.64位系统中,日志缓存最多包含128个项:32位系统中,则最多包含32个项.每个项含有一个缓冲器(buffer)用来存储日志记录——在它们作为一整个块(block)写入磁盘之前.虽然块的大小从512字节至60KB