Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用log4j2包装器API_Java_Wrapper_Log4j2 - Fatal编程技术网

Java 如何使用log4j2包装器API

Java 如何使用log4j2包装器API,java,wrapper,log4j2,Java,Wrapper,Log4j2,我确实在理解log4j2包装器的用法时遇到了一些困难 如果您遵循这一点,您会发现附件中有一个使用AbstractLoggerWrapper的示例。我只是复制了下面的代码 public class Log4j2Logger extends AbstractLogger { private static final String FQCN = AbstractLogger.class.getName(); private AbstractLoggerWrapper logImpl

我确实在理解log4j2包装器的用法时遇到了一些困难

如果您遵循这一点,您会发现附件中有一个使用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和intern的原因。实际上,我可以从Log4j2Logger中删除extend并封装AbstractLoggerWrapper。在上面截取的代码中,你看到这样做的原因了吗

有没有办法对AbstractLogger(比如)进行子类化,只使用它而不使用包装器?像战略模式一样创造它?e、 g

LogManager.getLogger( class.getName(), Log4j2Logger.class ) 
也许这就是他们试图解释的,但我还不明白。有人知道怎么做吗

诚恳 基督教徒


更新:我想说的是,我之所以使用包装器,是因为有一个带有包装器的log4j(1.2)的现有项目。

如果您查看以下文档:

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

您将看到一个清晰的指示,说明为什么它是以Apache的方式完成的。如果您决定忽略接口的契约,走自己的路,那么您实际上是在说

“我不在乎图书馆怎么办,我更清楚”

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


总而言之,请遵循图书馆文档中列出的合同。

我一点也不了解它,这就是我问如何正确使用它的原因。:)