我想为我的项目编写一个记录器。单个类的日志文件是 好 。多个类的日志对我来说似乎有问题。我不想 为一个类分配一个记录器,为10个类分配10个记录器。我想要 其他一些聪明的方法。我想要一个记录器为所有类
如何为多个类调用一个记录器
答案 0 :(得分:1)
您有多个记录器实例的原因是因为您希望它们在记录时表现出不同(通常通过打印出他们配置的类名)。如果您不关心这一点,您可以在类中创建一个静态记录器实例并在整个地方使用它。
如果是这样,您很可能希望配置您使用的记录器框架,因此它会打印出日志行所在的位置,因此您至少某些想法,其中log日志语句生成您所看到的内容位于。
答案 1 :(得分:1)
log4j 不建议为所有类定义单个记录器,因为这会阻碍您单独配置每个记录器的能力,但不包括最佳实践。有两种方法可以完成此任务。第一个是创建静态实用程序日志记录类。此示例不完整,但演示了如何定义日志记录实用程序类。
public final class LoggingUtils{
private LoggingUtils(){}
public static void log(String message){
//Log message
}
}
您可以实现此目的的另一种方法是创建单个静态记录器实例,然后从项目中的所有类调用该对象上的记录方法。 public static final Logger LOG = LogManager.getLogger();
答案 2 :(得分:1)
您可以简单地将静态实用程序日志记录类创建为单点记录器,因此如果我们需要更改记录器包,您将只更新此类。
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);
}
}
}