包含两个类,LogUtils 和 LogLevel

1.使用枚举类来设置日志级别

ALL("全部", 0),INFO("信息", 1),WARN("警告", 2),ERROR("错误", 3)

/**

*

 * 日志级别 * ALL("全部", 0) * INFO("信息", 1) * WARN("警告", 2) * ERROR("错误", 3) * 

*  @since 2018年4月9日 9:31:46

*  @author ygr

*/

public enum LogLevel {

ALL("[]", 0), INFO("[INFO]", 1), WARN("[WARN]", 2), ERROR("[ERROR]", 3);

private String name;

private int level;

LogLevel(String name, int level) {

this.name = name;

this.level = level;

}

public String getName() {

return name;

}

public int getLevel() {

return level;

}

/**

*

 * 判断是否允许打印 * 

* @author ygr

* @date 2018年4月9日 上午9:36:47

* @param minLevel 最低日志级别

* @return

*/

public boolean isAllow(LogLevel minLevel) {

if (level >= minLevel.getLevel()) {

return true;

}

return false;

}

}

2.打印日志工具类,

2.1 设置是否打印 setEnable(boolean enable);

2.2 打印的级别 setLogLevel(LogLevel level);

/**

*

 * 简单的日志工具类 * 

* @since 2018年4月9日 上午9:30:12

* @author ygr

*/

public class LogUtils {

/**

* 默认可以打印

*/

private static boolean enable = true;

/**

* 默认打印所有级别日志

*/

private static LogLevel minLevel = LogLevel.ALL;

/**

* 日期显示格式

*/

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");

/**

*

 * 设置是否开启打印 * 

* * @author ygr * @date 2018年4月9日 上午9:54:46 * @param enable

*/

public static void setEnable(boolean enable) {

LogUtils.enable = enable;

}

/**

*

 * 设置日志打印级别 * 

* * @author ygr * @date 2018年4月9日 上午9:42:09 * @param level

*/

public static void setLogLevel(LogLevel level) {

LogUtils.minLevel = level;

}

/**

*

 * 打印消息级别日志 * 

* * @author ygr * @date 2018年4月9日 上午9:42:59 * @param msg * 待打印消息

*/

public static void info(String msg) {

finalPrint(LogLevel.INFO, msg);

}

/**

*

 * 打印警告级别日志 * 

* * @author ygr * @date 2018年4月9日 上午9:42:59 * @param msg * 待打印消息

*/

public static void warn(String msg) {

finalPrint(LogLevel.WARN, msg);

}

/**

*

 * 打印错误级别日志 * 

* * @author ygr * @date 2018年4月9日 上午9:42:59 * @param msg * 待打印消息

*/

public static void error(String msg) {

finalPrint(LogLevel.ERROR, msg);

}

/**

*

 * 最终打印日志 * 

* * @author ygr * @date 2018年4月9日 上午9:50:21 * @param logLevel * 日志级别 * @param msg * 待打印消息

*/

private static void finalPrint(LogLevel logLevel, String msg) {

if (!enable) {

return;

}

if (logLevel.isAllow(minLevel)) {

System.out.printf("%s %s %s\n", formatCurrentTime(), logLevel.getName(), msg);

}

}

/**

*

 * 获取当前时间 * 

* * @author ygr * @date 2018年4月9日 上午9:49:00 * @return

*/

private static String formatCurrentTime() {

return sdf.format(new Date());

}

}

3.测试代码

public static void main(String[] args) throws InterruptedException {

LogUtils.info("这是info消息");

LogUtils.warn("这是warn消息");

LogUtils.error("这是error消息");

LogUtils.setEnable(false);

LogUtils.info("这是info消息");

LogUtils.setEnable(true);

Thread.sleep(1000);

LogUtils.setLogLevel(LogLevel.WARN);

LogUtils.info("这是info消息");

LogUtils.warn("这是warn消息");

LogUtils.error("这是error消息");

}

4.高级一点的功能

1、打印日志所在类,所在行数;

2、可设置标记,方便定位;

3、可点击直接跳转。

/**

*

 * 简单的日志工具类 * 

* * @since 2018年4月9日 上午9:30:12 * @author ygr

*/

public class LogUtils {

/**

* 默认可以打印

*/

private static boolean enable = true;

/**

* 默认打印所有级别日志

*/

private static LogLevel minLevel = LogLevel.ALL;

/**

* 默认保存到磁盘

*/

private static boolean persistent = true;

/**

* 日期显示格式

*/

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

private static Date date = null;

/**

*

 * 设置是否开启打印 * 

* * @author ygr * @date 2018年4月9日 上午9:54:46 * @param enable

*/

public static void setEnable(boolean enable) {

LogUtils.enable = enable;

}

/**

*

 * 设置是否持久化 * 

* * @author ygr * @date 2018年4月9日 下午12:47:50 * @param persistent

*/

public static void setPersistent(boolean persistent) {

LogUtils.persistent = persistent;

}

/**

*

 * 设置日志打印级别 * 

* * @author ygr * @date 2018年4月9日 上午9:42:09 * @param level

*/

public static void setLogLevel(LogLevel level) {

LogUtils.minLevel = level;

}

/**

*

 * 打印消息级别日志 * 

* * @author ygr * @date 2018年4月9日 上午9:42:59 * @param msg * 待打印消息

*/

public static void info(String msg) {

finalPrint(LogLevel.INFO, msg);

}

/**

*

 * 打印消息级别日志 * 

* * @author ygr * @date 2018年4月9日 下午3:54:56 * @param msg * 待打印消息 * @param tag * 特殊标记

*/

public static void info(String msg, String tag) {

finalPrint(LogLevel.INFO, msg, tag);

}

/**

*

 * 打印警告级别日志 * 

* * @author ygr * @date 2018年4月9日 上午9:42:59 * @param msg * 待打印消息

*/

public static void warn(String msg) {

finalPrint(LogLevel.WARN, msg);

}

/**

*

 * 打印警告级别日志 * 

* * @author ygr * @date 2018年4月9日 下午3:54:56 * @param msg * 待打印消息 * @param tag * 特殊标记

*/

public static void warn(String msg, String tag) {

finalPrint(LogLevel.WARN, msg, tag);

}

/**

*

 * 打印错误级别日志 * 

* * @author ygr * @date 2018年4月9日 上午9:42:59 * @param msg * 待打印消息

*/

public static void error(String msg) {

finalPrint(LogLevel.ERROR, msg);

}

/**

*

 * 打印错误级别日志 * 

* * @author ygr * @date 2018年4月9日 下午3:54:56 * @param msg * 待打印消息 * @param tag * 特殊标记

*/

public static void error(String msg, String tag) {

finalPrint(LogLevel.ERROR, msg, tag);

}

/**

*

 * 最终打印日志 * 

* * @author ygr * @date 2018年4月9日 上午9:50:21 * @param logLevel * 日志级别 * @param msg * 待打印消息

*/

private static void finalPrint(LogLevel logLevel, String msg) {

finalPrint(logLevel, msg, null);

}

private static void finalPrint(LogLevel logLevel, String msg, String tag) {

// 不允许打印

if (!enable) {

return;

}

// 允许打印该级别日志

if (logLevel.isAllow(minLevel)) {

StringBuilder builder = new StringBuilder();

builder.append(formatCurrentTime()).append(" ");

// 属性信息

StackTraceElement traceElement = getStackTraceElement();

if (traceElement != null) {

builder.append("(").append(traceElement.getFileName()).append(":").append(

traceElement.getLineNumber()).append(")").append(" ");

}

// 有特殊标记

if (tag != null && tag.length() != 0) {

builder.append("[").append(tag).append("]").append(" ");

}

// 级别和最终消息

builder.append(logLevel.getName()).append(" ").append(msg);

String message = builder.toString();

System.out.println(message);

// 持久化

if (persistent) {

PersistentUtils.save(message);

}

}

}

/**

*

 * 获取当前时间 * 

* * @author ygr * @date 2018年4月9日 上午9:49:00 * @return

*/

private static String formatCurrentTime() {

date = new Date();

return sdf.format(date);

}

/**

*

 * 获取打印日志的所属文件、所在行数等信息 * 

* * @author ygr * @date 2018年4月9日 下午3:41:10 * @return

*/

private static StackTraceElement getStackTraceElement() {

StackTraceElement[] trace = Thread.currentThread().getStackTrace();

int methodCount = 1;

int stackOffset = getStackOffset(trace);

if (methodCount + stackOffset > trace.length) {

methodCount = trace.length - stackOffset - 1;

}

for (int i = methodCount; i > 0; i--) {

int stackIndex = i + stackOffset;

if (stackIndex >= trace.length) {

continue;

}

StackTraceElement element = trace[stackIndex];

return element;

}

return null;

}

/**

*

 * 获取栈的偏移位置 * 

* * @author ygr * @date 2018年4月9日 下午3:36:30 * @param trace * @return

*/

private static int getStackOffset(StackTraceElement[] trace) {

for (int i = 2; i < trace.length; i++) {

StackTraceElement e = trace[i];

String name = e.getClassName();

if (!name.equals(LogUtils.class.getName())) {

return --i;

}

}

return -1;

}

}

logutils java_简单的日志工具类LogUtils相关推荐

  1. 日志打印工具类LogUtils

    /** * 日志工具类: * 我们在项目中经常会打印日志,但是在项目上线后日志仍然会打印 * 这样会降低程序运行效率,因此需要在项目上线的时候把日志屏蔽掉 */ public class LogUti ...

  2. 解密android日志xlog,安卓开发技巧2:自定义日志工具类XLog的实现

    安卓开发技巧二:自定义日志工具类XLog的实现 我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项 ...

  3. 日志工具类——Log

    Log的使用 Log是Android(android.util.Log)中的日志工具类,用于获取程序从启动到关闭的日志信息. Log类所输出的日志内容分为六个级别:Verbose ,Debug ,In ...

  4. wsm-lucene 一个简单的Lucene工具类

    代码地址: https://gitee.com/shaojiepeng/wsm-lucene wsm-lucene 一个简单的Lucene工具类,通过注释的方式来配置构建索引的字段.提供新建索引.查找 ...

  5. 鸿蒙harmonyOS打印Log日志工具类+看不到Log日志的问题

    鸿蒙harmonyOS打印Log日志工具类+看不到Log日志的问题 文章目录 鸿蒙harmonyOS打印Log日志工具类+看不到Log日志的问题 前言 一.使用工具类 二.封装步骤 1.鸿蒙harmo ...

  6. Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...

    关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089    在开发中,我们常常用打印log的方 ...

  7. Android开发之非常好用的日志工具类(公司项目挖出来的)

    /*** 日志相关类:默认是测试环境<br>* <b>支持:存储Log日志文件到本地.发送Log日志信息到服务器</b>** @since 2016-5-13 14 ...

  8. 使用Python 封装一个简单的Mysql工具类

    pymysql操作mysql,虽然简单,但每次都要链接数据库,获取游标,关闭游标,关闭链接.这些操作无技术含量,还要重复编写!!想一想不如封装一个DBUtil,来提高开发效率. 要编写工具类首先要把公 ...

  9. 图片上传工具 java_图片上传工具类-fileUtil

    图片上传的工具类:生成缩略图,文件流转换. 可与struts2集成使用 import java.awt.Color; import java.awt.Graphics2D; import java.a ...

  10. 一个简单的数据库工具类

    为什么80%的码农都做不了架构师?>>>    接上面一片博文,自己弄了一个简单的数据库操作工具类: /** 创建日期 2014-6-5** TODO 要更改此生成的文件的模板,请转 ...

最新文章

  1. 07/11/08 资料整理
  2. sap知识-MPS和MRP的区别
  3. 从 SPIR-V 到 ISPC:将 GPU 计算转化为 CPU 计算
  4. 日常生活小技巧 -- UltraEdit复制16进制数据
  5. 《腾讯传》读后感一——时势造英雄
  6. RocketMQ中的死信队列
  7. C++学习之路 | PTA乙级——1092 最好吃的月饼 (20 分)(精简)
  8. 使用oracle/mysql/tidb由空格引发的血案解析
  9. 2.Jenkins 2 权威指南 --- 基础知识
  10. JavaScript 弹窗事件
  11. 湖北大学知行学院考研计算机,我院2016届毕业生考研喜创佳绩
  12. 【用Python对全职高手小说分析分词词频词性,小说人物出场次数排序,小说中食物排序,小说人物关系等等】
  13. activiti学习之回退实现
  14. Mac 查找软件安装位置
  15. 国家标准GB7713-87
  16. 七年时间,微软智能云在中国走过的“大江大河”
  17. 彻底删除已经下载安装好的Mysql
  18. 183套免费简历模板,助大伙找个好工作
  19. 解决了ora-00119和ora-00132这个问题,不容易啊
  20. 服务器操作系统方案,服务器操作系统解决方案

热门文章

  1. c语言模拟扫雷小游戏
  2. OpenGL(十三) Alpha测试、剪裁测试
  3. qp_查看表的数据是否更新了指定的某一天数据
  4. 趣学python编程下载_父与子的程序编写之旅:与小卡特一起学PythonPDF高清完整版一键下载|百度云盘...
  5. 万能开头结尾(申论)
  6. NetBeans IDE12.3无法卸载
  7. 百度Clouda的初步探索
  8. 如何用java获取网页源代码
  9. 黑客是怎样入侵你的网站的
  10. gtk 程序设计(c语言版) pdf,GTK+程序设计入门