logutils java_【java】简单的日志工具类LogUtils
包含兩個(gè)類,LogUtils 和 LogLevel
1.使用枚舉類來設(shè)置日志級別
ALL("全部", 0),INFO("信息", 1),WARN("警告", 2),ERROR("錯(cuò)誤", 3)
/**
*
* 日志級別
* ALL("全部", 0)
* INFO("信息", 1)
* WARN("警告", 2)
* ERROR("錯(cuò)誤", 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 設(shè)置是否打印 setEnable(boolean enable);
2.2 打印的級別 setLogLevel(LogLevel level);
/**
*
* 簡單的日志工具類
*
*
* @since 2018年4月9日 上午9:30:12
* @author ygr
*/
public class LogUtils {
/** 默認(rèn)可以打印 */
private static boolean enable = true;
/** 默認(rèn)打印所有級別日志 */
private static LogLevel minLevel = LogLevel.ALL;
/** 日期顯示格式 */
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
/**
*
* 設(shè)置是否開啟打印
*
*
* @author ygr
* @date 2018年4月9日 上午9:54:46
* @param enable
*/
public static void setEnable(boolean enable) {
LogUtils.enable = enable;
}
/**
*
* 設(shè)置日志打印級別
*
*
* @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);
}
/**
*
* 打印錯(cuò)誤級別日志
*
*
* @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);
}
}
/**
*
* 獲取當(dāng)前時(shí)間
*
*
* @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.運(yùn)行結(jié)果圖
2018-04-09 16:03:48
5.高級一點(diǎn)的功能
1、打印日志所在類,所在行數(shù);
2、可設(shè)置標(biāo)記,方便定位;
3、可點(diǎn)擊直接跳轉(zhuǎn)。
/**
*
* 簡單的日志工具類
*
*
* @since 2018年4月9日 上午9:30:12
* @author ygr
*/
public class LogUtils {
/** 默認(rèn)可以打印 */
private static boolean enable = true;
/** 默認(rèn)打印所有級別日志 */
private static LogLevel minLevel = LogLevel.ALL;
/** 默認(rèn)保存到磁盤 */
private static boolean persistent = true;
/** 日期顯示格式 */
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
private static Date date = null;
/**
*
* 設(shè)置是否開啟打印
*
*
* @author ygr
* @date 2018年4月9日 上午9:54:46
* @param enable
*/
public static void setEnable(boolean enable) {
LogUtils.enable = enable;
}
/**
*
* 設(shè)置是否持久化
*
*
* @author ygr
* @date 2018年4月9日 下午12:47:50
* @param persistent
*/
public static void setPersistent(boolean persistent) {
LogUtils.persistent = persistent;
}
/**
*
* 設(shè)置日志打印級別
*
*
* @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
* 特殊標(biāo)記
*/
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
* 特殊標(biāo)記
*/
public static void warn(String msg, String tag) {
finalPrint(LogLevel.WARN, msg, tag);
}
/**
*
* 打印錯(cuò)誤級別日志
*
*
* @author ygr
* @date 2018年4月9日 上午9:42:59
* @param msg
* 待打印消息
*/
public static void error(String msg) {
finalPrint(LogLevel.ERROR, msg);
}
/**
*
* 打印錯(cuò)誤級別日志
*
*
* @author ygr
* @date 2018年4月9日 下午3:54:56
* @param msg
* 待打印消息
* @param tag
* 特殊標(biāo)記
*/
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);
}
/**
*
* 多一個(gè)tag標(biāo)記
*
*
* @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(" ");
}
// 有特殊標(biāo)記
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);
}
}
}
/**
*
* 獲取當(dāng)前時(shí)間
*
*
* @author ygr
* @date 2018年4月9日 上午9:49:00
* @return
*/
private static String formatCurrentTime() {
date = new Date();
return sdf.format(date);
}
/**
*
* 獲取打印日志的所屬文件、所在行數(shù)等信息
*
*
* @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;
}
}
6.運(yùn)行效果圖
打開App,閱讀手記
總結(jié)
以上是生活随笔為你收集整理的logutils java_【java】简单的日志工具类LogUtils的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL CSB 11.10
- 下一篇: 华为:拿什么留住员工