我在理解 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 和实习生进行子类化的原因。我实际上可以从 Log4j2Logger 中删除扩展并封装 AbstractLoggerWrapper。您是否看到像上面截断的代码那样这样做的任何原因?
有没有办法对 AbstractLogger 进行子类化(如preferred)并在没有包装器的情况下使用它?并像策略模式一样创建它?例如,
LogManager.getLogger( class.getName(), Log4j2Logger.class )
也许这就是他们试图在扩展部分中解释的内容,但我还不明白。有人知道怎么做吗?
真诚的基督徒
更新:我错过了说,我使用包装器的原因是因为现有的带有包装器的 log4j (1.2) 项目。