早些时候我们这样做如下: 这是我们用来获取记录器层次结构和记录器的代码。但现在在 log4j2 中,层次结构类不存在。 在 log4j2 中实现以下的替代方案是什么?
public class ReportHierarchy extends Hierarchy
{
public ReportHierarchy(Logger root)
{
super(root);
}
public Logger getLogger(String name)
{
return getLogger(name, defaultFactory);
}
private LoggerFactory defaultFactory = new ReportFactory();
}
我们使用 ReportHierarchy 类,如下所示:
static
{
ReportHierarchy h = new ReportHierarchy(new RootLogger(Level.DEBUG));
LogManager.setRepositorySelector(new DefaultRepositorySelector(h), "nuova");
LogManager.resetConfiguration();
NuRollingFileAppender.initializeCleanupTimer();
}
这部分架构在 Log4j 1.x 和 Log4j2 之间没有改变,但名称发生了变化。所以你有:
- 一个
ContextSelector
而不是一个RepositorySelector
, - 一个
LoggerContext
而不是Hierarchy
.
无需再在代码中设置ContextSelector
,只需将log4j2.contextSelector
Log4j2 系统属性设置为选择器的完全限定类名即可。例如,您可以在log4j2.component.properties
文件中执行此操作。