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的更多相关文章

  1. Android关于log日志,华为不输出log.v,log.d(zz)

    [java] view plain copy 我用的是mate8,本来虚拟机测试一点日志一点问题没有 [java] view plain copy 但是真机测试发现log.d一直不输出,正好又试了lo ...

  2. Spring Boot Log 日志使用教程

    我们编写任何 Spring Boot 程序,可能绕不开的就是 log 日志框架(组件). 在大多数程序员眼中日志是用来定位问题的.这很重要. 本项目源码下载 注意本项目提供的源码已在后期重新编写,有部 ...

  3. golang log日志

    写入日志文件 func main() { file, err := os.Create("test.log") if err != nil { log.Fatalln(" ...

  4. scrapy框架之log日志

    scrapy中的debug信息 在scrapy中设置log 1.在settings中设置log级别,在settings.py中添加一行: Scrapy提供5层logging级别: CRITICAL - ...

  5. JFinal - Log 日志

    今天偶然发现 JFinal 的 Log 简单小巧.上代码. JFinal 在初始化的时候有初始化 Log. class Config { // ... static void configJFinal ...

  6. java中关于log日志

    博:http://zhw2527.iteye.com/blog/1006302 http://zhw2527.iteye.com/blog/1099658 在项目开发中,记录错误日志是一个很有必要功能 ...

  7. 转 -Filebeat + Redis 管理 LOG日志实践

    Filebeat + Redis 管理 LOG日志实践 小赵营 关注 2019.01.06 17:52* 字数 1648 阅读 24评论 0喜欢 2 引用 转载 请注明出处 某早上,领导怒吼声远远传来 ...

  8. C/C++log日志库比较

    事实上,在C的世界里面没有特别好的日志函数库(就像Java里面的的log4j,或者C++的log4cxx).C程序员都喜欢用自己的轮子.printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者 ...

  9. Log 日志工具类 保存到文件 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. yolo原理学习

    1.[yolov1]    第一步:将图像划分为S*S的栅格(grid cell),这里分成了7*7的grid cell.栅格的任务是:检测中心落在该栅格中的物体(注意,栅格中心未必与物体的中心重合, ...

  2. 用libtommath实现RSA算法

    RSA算法描述: 1) 选择两个大素数 p.q, 计算 n = p*q; 2) 产生 e, d 使: e*d = 1mod(p-1)(q-1) e 与 (p-1)(q-1) 互质 [公钥] e.n [ ...

  3. bzoj2159

    树形dp+第二类斯特林数 又是这种形式,只不过这次不用伯努利数了 直接搞肯定不行,我们化简一下式子,考虑x^n的组合意义,是把n个物品放到x个箱子里的方案数.那么就等于这个i=1->n,sigm ...

  4. ASP.NET Core 2.2 附加的数据文件存放在项目文件夹内

    在ASP.NET 4.x中(包括ASP.NET MVC 5),可以通过附加数据库文件的方式,将数据库保存在项目的文件中.这种方式对于不同时段需要更换计算机(白天办公室,晚上家里)开发时带来好处. 而. ...

  5. Prime Independence

    题意: 对于给定集合,求解最大的子集合,使得集合内两两之商不为质数. 解法: 考虑对于每一个数字分解质因数可以得到 $O(nloglogNUM)$ 条两个数字不可以出现在同一集合的信息. 同时发现一条 ...

  6. spring mvc 处理映射的几种方式

    1.Spring MVC bean的nameurl处理映射 <bean class="org.springframework.web.servlet.view.InternalReso ...

  7. HTML学习笔记(二)HTML格式化

    很多标签都可以用来改变文本的外观,并为文本关联其隐藏的含义.总地来说,这些标签可以分成两类:基于内容的样式(content-based style)和物理样式(physical style). 一.基 ...

  8. laravel 视图调用方法并传递参数

    视图层 route 中文 路由 <a href="{{route('cc',array('id'=>11111))}}">446454</a> 路由层 ...

  9. 解决 unity 生成 android apk read Resources

    http://www.cnblogs.com/solq/archive/2012/05/21/2511522.html TextAsset t = (TextAsset)Resources.Load( ...

  10. TFS 无法找到新加的Windows用户

    Windows 用户加入后,无法在TFS中的"浏览"中找到(只有已经加入TFS的Windows用户显示出来) 其实这时候只要直接输入 用户名 然后点击"保存更改" ...