0

我想使用slf4j. 我编写自己的记录器类

public class GlobalLogger {
   private static final Logger logger = LoggerFactory.getLogger(GlobalLogger.class);
   public static void logApplicationLog(String message) {
     logger.info("[" + APPLICATION_LOG + "]" + message);
   }
}

我在 log4j 中使用模式布局,以便在日志%C显示类中GlobalLogger显示%C调用类。如果记录器的对象在整个应用程序中应该是单例的,我该如何做到这一点?

4

2 回答 2

0

在记录器类上编写一个包装器,它将充当一个单例类。喜欢 :

public class Logger{

private static Logger logger;    
private Logger(){
}
public synchronized static Logger getLogger()
    {
        if (logger!= null)
            return logger;
        return logger=LoggerFactory.getLogger(GlobalLogger.class);
    }

}
于 2013-05-02T05:59:06.663 回答
0

如果您想要创建记录器并向其发送消息的简写:

public class GlobalLogger {

   public static void logApplicationLog( String message, Class source ) {
     LoggerFactory.getLogger(source).info("[" + APPLICATION_LOG + "]" + message);
   }

}

我不知道是否有可能在“每条消息”的基础上注入源,尽管可能有一个。

注意:我建议在每个应该记录某些内容的类中使用静态 Logger 实例,而不是我上面给出的代码。您甚至可以更改用于创建新类的 IDE 模板,使其已经包含在内。

编辑

我看到您想放置一个静态部分来创建“类别”(至于您上面的评论)。

那么为什么不LoggerFactory.getLogger(APPLICATION_LOG)为每个类别创建附加程序,并在模式中添加静态文本呢?或者您是否必须能够按包更改 logLevels?

于 2013-05-02T06:25:15.037 回答