ITPub博客

首页 > IT职业 > IT职场 > 【java】简单的日志工具类LogUtils

【java】简单的日志工具类LogUtils

IT职场 作者:stein_ah 时间:2021-09-09 09:10:54 0 删除 编辑

包含两个类,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 %sn", 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.运行结果图图片描述


2018-04-09 16:03:48
5.高级一点的功能
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); } /** *
     * 多一个tag标记
     * 
* * @author ygr * @date 2018年4月9日 下午3:52:07 * @param logLevel * @param msg * @param tag */ 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

6.运行效果图
图片描述

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3356/viewspace-2808377/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-14

  • 博文量
    100
  • 访问量
    679