2016-11-28 129 views
1

我想为我的项目编写记录器。单个类的日志文件是 好的。登录多个类似乎对我来说是个问题。我不想 为一个类分配一个记录器,为10个类分配一个记录器。我想 其他一些聪明的办法.means我想一个记录所有班组长如何为100个类创建一个记录器

如何调用一个记录多个班组长

回答

1

你有多个实例记录器的原因是因为你希望他们的行为不同日志记录时(通常通过打印出它们配置的类名称)。如果你不关心这一点,你可以在一个类中创建一个静态记录器实例,并在整个地方使用它。

如果是这样,您最有可能需要配置您使用的记录器框架,因此它会打印出日志行所在的位置,因此至少有一些想法可用于生成所看到的日志语句。

1

为所有类别定义单个记录器不建议 by log4j,因为这会妨碍您单独配置每个记录器的能力,但不包括最佳实践。有两种方法可以完成这项任务。首先是创建一个静态实用程序日志记录类。这个例子是不完整的,但展示了如何定义一个日志实用程序类。

public final class LoggingUtils{ 

    private LoggingUtils(){} 

    public static void log(String message){ 
     //Log message 
    } 
} 

你能做到这一点的另一种方式是建立一个单一的,静态的记录器实例,然后调用该对象的测井方法,从项目中的所有类。 public static final Logger LOG = LogManager.getLogger();

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); 
     } 
    } 

} 
相关问题