如何使用log4j2包装器API

时间:2013-06-17 12:02:33

标签: java wrapper log4j2

我在理解log4j2包装器使用方面遇到了一些麻烦。

如果您遵循此link,您会发现使用AbstractLoggerWrapper附加了一个示例。我刚刚复制了下面的代码。

public class Log4j2Logger extends AbstractLogger 
{

    private static final String FQCN = AbstractLogger.class.getName();
    private AbstractLoggerWrapper logImpl;

    public Log4j2Logger(String name, String prefix, String logId, String instanceId)
    {
        super(name, prefix, logId, instanceId);
        final AbstractLogger logger = (AbstractLogger) LogManager.getLogger(name);
        this.logImpl = new AbstractLoggerWrapper(logger, name);
    }

    ....

    @Override
    public void log(String message, LogLevel level)
    {
        logImpl.log(null, FQCN, toImplLevel(level), new SimpleMessage(createMessage(message)), null);
    }

    ....
}

我不明白使用AbstractLoggerWrapper子类化AbstractLogger和实习的原因。我实际上可以从Log4j2Logger中删除扩展并封装AbstractLoggerWrapper。您是否认为有任何理由在上面的代码中执行此操作?

有没有办法继承AbstractLogger(如preferred)并只使用它而没有包装器?并将其创建为战略模式?如,

LogManager.getLogger( class.getName(), Log4j2Logger.class ) 

也许这是他们试图在extending section中解释的内容,但我还不明白。有人知道怎么做吗?

此致 基督教

更新:我错过了说,我使用包装器的原因是因为现有的带有包装器的log4j(1.2)的项目。

1 个答案:

答案 0 :(得分:0)

如果您查看AbstractLoggerWrapper的文档:

  

将受保护的AbstractLogger方法公开给的包装类   支持包装记录器。

您将看到一个明确的指示,说明为什么以Apache的方式完成它。如果您决定忽略界面的合同并按自己的方式行事,那么您实际上是在说

  

“我不关心图书馆是如何做事的,我知道的更好”

因此,您承担了很大的风险,而不是使用已提供的一般解决方案。我真诚地怀疑你有一个如此深奥的环境,图书馆可能是不够的。

总结一下,请遵循图书馆文件规定的合同。