我在理解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)的项目。
答案 0 :(得分:0)
如果您查看AbstractLoggerWrapper的文档:
将受保护的AbstractLogger方法公开给的包装类 支持包装记录器。
您将看到一个明确的指示,说明为什么以Apache的方式完成它。如果您决定忽略界面的合同并按自己的方式行事,那么您实际上是在说
“我不关心图书馆是如何做事的,我知道的更好”
因此,您承担了很大的风险,而不是使用已提供的一般解决方案。我真诚地怀疑你有一个如此深奥的环境,图书馆可能是不够的。
总结一下,请遵循图书馆文件规定的合同。