需求
在Slf4j中封装一个方法,每当调用这个方法时在日志中输出当前时间、线程id和当前类,并可输出传入的日志信息
创建一个自定义工具类CustomLogger
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CustomLogger {
private static final Logger LOGGER = LoggerFactory.getLogger(CustomLogger.class);
// 封装一个方法,用于输出自定义日志,自动获取当前调用类的类名
public static void logCustomMessage(String message) {
// 获取当前时间
String currentTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
// 获取线程ID
long threadId = Thread.currentThread().getId();
// 获取堆栈跟踪并获取当前调用方法的类名
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
if (stackTraceElements.length > 2) { // 忽略CustomLogger类和当前方法本身的堆栈帧
String className = stackTraceElements[2].getClassName();
// 如果需要,可以只保留包名后的简单类名
int lastIndex = className.lastIndexOf('.');
if (lastIndex != -1) {
className = className.substring(lastIndex + 1);
}
// 构造日志信息并输出
LOGGER.info("{} [{}] {} - {}", currentTime, threadId, className, message);
} else {
LOGGER.info("{} [{}] 无法确定调用类 - {}", currentTime, threadId, message);
}
}
// 如果需要,还可以添加更多级别的日志方法(如debug, warn, error等)
}
现在,你可以在你的代码中这样使用CustomLogger
:
public class SomeService {
public void doSomething() {
// 调用封装的日志方法
CustomLogger.logCustomMessage("This is a custom log message");
}
}