Lý do bạn có nhiều bản ghi nhật ký là vì bạn muốn chúng hoạt động khác nhau khi ghi nhật ký (thường bằng cách in ra tên lớp mà chúng được định cấu hình). Nếu bạn không quan tâm về điều đó, bạn chỉ có thể tạo một cá thể logger tĩnh duy nhất trong một lớp và sử dụng tất cả các nơi đó.
Để tạo logger đơn, bạn chỉ cần tạo một lớp ghi nhật ký tiện ích tĩnh là logger điểm duy nhất, vì vậy nếu cần thay đổi gói logger, bạn sẽ chỉ cập nhật lớp này.
final public class Logger {
private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger("Log");
enum Level {Error, Warn, Fatal, Info, Debug}
private Logger() {/* do nothing */};
public static void logError(Class clazz, String msg) {
log(Level.Error, clazz, msg, null);
}
public static void logWarn(Class clazz, String msg) {
log(Level.Warn, clazz, msg, null);
}
public static void logFatal(Class clazz, String msg) {
log(Level.Fatal, clazz, msg, null);
}
public static void logInfo(Class clazz, String msg) {
log(Level.Info, clazz, msg, null);
}
public static void logDebug(Class clazz, String msg) {
log(Level.Debug, clazz, msg, null);
}
public static void logError(Class clazz, String msg, Throwable throwable) {
log(Level.Error, clazz, msg, throwable);
}
public static void logWarn(Class clazz, String msg, Throwable throwable) {
log(Level.Warn, clazz, msg, throwable);
}
public static void logFatal(Class clazz, String msg, Throwable throwable) {
log(Level.Fatal, clazz, msg, throwable);
}
public static void logInfo(Class clazz, String msg, Throwable throwable) {
log(Level.Info, clazz, msg, throwable);
}
public static void logDebug(Class clazz, String msg, Throwable throwable) {
log(Level.Debug, clazz, msg, throwable);
}
private static void log(Level level, Class clazz, String msg, Throwable throwable) {
String message = String.format("[%s] : %s", clazz, msg);
switch (level) {
case Info:
logger.info(message, throwable);
break;
case Warn:
logger.warn(message, throwable);
break;
case Error:
logger.error(message, throwable);
break;
case Fatal:
logger.fatal(message, throwable);
break;
default:
case Debug:
logger.debug(message, throwable);
}
}
}
Tôi đã làm đúng như bạn đã đề cập, nhưng chỉ các nhật ký trong lớp Chính được in, nhật ký trong các phương pháp khác không được in? cách khắc phục –