如何为100个类创建一个记录器

时间:2016-11-28 18:09:46

标签: java log4j

我想为我的项目编写一个记录器。单个类的日志文件是 好 。多个类的日志对我来说似乎有问题。我不想 为一个类分配一个记录器,为10个类分配10个记录器。我想要 其他一些聪明的方法。我想要一个记录器为所有类

如何为多个类调用一个记录器

3 个答案:

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

}