Java 如何使用log4j2包装器API
我确实在理解log4j2包装器的用法时遇到了一些困难 如果您遵循这一点,您会发现附件中有一个使用AbstractLoggerWrapper的示例。我只是复制了下面的代码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
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的方式完成的。如果您决定忽略接口的契约,走自己的路,那么您实际上是在说 “我不在乎图书馆怎么办,我更清楚” 因此,您承担了很大的风险,而不是使用提供的通用解决方案。我真诚地怀疑你的环境如此深奥,以至于图书馆可能不够用
总而言之,请遵循图书馆文档中列出的合同。我一点也不了解它,这就是我问如何正确使用它的原因。:)