Skip to content

Commit

Permalink
feat(logger): 新增日志格式化功能并更新版本至1.6-SNAPSHOT
Browse files Browse the repository at this point in the history
  • Loading branch information
LangYa466 committed Jan 4, 2025
1 parent 5ffb9a3 commit 7261daa
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 7 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ EasyLog 是一个轻量级的 Java 日志库,支持彩色日志输出、格式
- **彩色输出**:根据日志级别,控制台输出不同颜色的日志消息。
- **时间戳**:日志消息包含详细的时间戳(格式:`yyyy-MM-dd HH:mm:ss`)。
- **日志文件**:默认输出到 `langya.log`,支持自定义文件路径。
- **格式化消息**:支持 `{}` 占位符,用于动态插入变量,也支持自定义。
- **异常堆栈**:可记录完整的异常堆栈信息。

### 引入库
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>cn.langya</groupId>
<artifactId>EasyLog</artifactId>
<version>1.5-SNAPSHOT</version>
<version>1.6-SNAPSHOT</version>


<dependencies>
Expand Down
97 changes: 91 additions & 6 deletions src/main/java/cn/langya/Logger.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@ public class Logger {
private static LogLevel currentLogLevel = LogLevel.INFO;
private static String logFilePath = DEFAULT_LOG_FILE;

private static String format = "{}";

private static final String RESET = "\u001B[0m";
private static final String RED = "\u001B[31m";
private static final String YELLOW = "\u001B[33m";
private static final String GREEN = "\u001B[32m";
private static final String CYAN = "\u001B[36m";
private static final String BLUE = "\u001B[34m";


private static Thread logWriterThread; // 日志写入线程

static {
Expand All @@ -35,50 +36,124 @@ public class Logger {
logWriterThread.start();
}

/**
* 设置日志格式
* @param format 日志格式字符串
*/
public static synchronized void setFormat(String format) {
Logger.format = format;
}

/**
* 设置不写入文件
*/
public static void setNoWriteFile() {
Logger.logWriterThread = null;
}

/**
* 设置日志文件路径
* @param logFilePath 日志文件路径
*/
public static void setLogFilePath(String logFilePath) {
Logger.logFilePath = logFilePath;
}

/**
* 设置日志文件
* @param filePath 日志文件路径
*/
public static void setLogFile(String filePath) {
logFilePath = filePath;
}

/**
* 设置日志级别
* @param level 日志级别
*/
public static void setLogLevel(LogLevel level) {
currentLogLevel = level;
}

/**
* 记录TRACE级别的日志
* @param message 日志信息
* @param args 日志参数
*/
public static void trace(String message, Object... args) {
log(LogLevel.TRACE, BLUE, message, args);
}

/**
* 记录DEBUG级别的日志
* @param message 日志信息
* @param args 日志参数
*/
public static void debug(String message, Object... args) {
log(LogLevel.DEBUG, CYAN, message, args);
}

/**
* 记录INFO级别的日志
* @param message 日志信息
* @param args 日志参数
*/
public static void info(String message, Object... args) {
log(LogLevel.INFO, GREEN, message, args);
}

/**
* 记录WARN级别的日志
* @param message 日志信息
* @param args 日志参数
*/
public static void warn(String message, Object... args) {
log(LogLevel.WARN, YELLOW, message, args);
}

/**
* 记录ERROR级别的日志
* @param message 日志信息
* @param args 日志参数
*/
public static void error(String message, Object... args) {
log(LogLevel.ERROR, RED, message, args);
}

/**
* 记录日志
* @param level 日志级别
* @param color 日志颜色
* @param message 日志信息
* @param args 日志参数
*/
private static void log(LogLevel level,String color, String message, Object... args) {
if (level.getLevel() < currentLogLevel.getLevel()) {
return; // 如果当前日志级别低于设置的级别,则不输出
}
asyncPrint(level, color, message, args);
}

// 异步打印日志到控制台并放入队列
/**
* 格式化日志信息
* @param message 日志信息
* @param args 日志参数
* @return 格式化后的日志信息
*/
private static String format(String message, Object... args) {
if (args == null || args.length == 0) {
return message;
}
return String.format(message.replace(format, "%s"), args); // 使用 String.format 进行替换
}

/**
* 异步打印日志到控制台并放入队列
* @param level 日志级别
* @param color 日志颜色
* @param message 日志信息
* @param args 日志参数
*/
private static void asyncPrint(LogLevel level, String color, String message, Object... args) {
executor.submit(() -> {
// 时间戳
Expand All @@ -88,7 +163,7 @@ private static void asyncPrint(LogLevel level, String color, String message, Obj
String logLevel = String.format("[%s]", level);

// 格式化消息内容
String formattedMessage = String.format(message, args);
String formattedMessage = format(message, args);

// 最终的日志信息
String finalMessage = String.format("%s%s %s %s %s", color, timestamp, logLevel, formattedMessage, RESET); // 修正拼接
Expand All @@ -104,7 +179,9 @@ private static void asyncPrint(LogLevel level, String color, String message, Obj
});
}

// 专门的线程负责将日志写入文件
/**
* 专门的线程负责将日志写入文件
*/
private static void writeLogsToFile() {
while (true) {
try {
Expand All @@ -117,7 +194,10 @@ private static void writeLogsToFile() {
}
}

// 将日志写入文件
/**
* 将日志写入文件
* @param message 日志信息
*/
private static void writeToFile(String message) {
File logFile = new File(logFilePath);
try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile, true))) {
Expand All @@ -128,6 +208,9 @@ private static void writeToFile(String message) {
}
}

/**
* 关闭日志系统
*/
public static void shutdown() {
// 关闭线程池
executor.shutdown();
Expand All @@ -147,7 +230,9 @@ public static void shutdown() {
}
}

// 日志级别枚举
/**
* 日志级别枚举
*/
public enum LogLevel {
TRACE(0), DEBUG(1), INFO(2), WARN(3), ERROR(4);

Expand Down

0 comments on commit 7261daa

Please sign in to comment.