以前在log4j 1.x中,我能够在Appender上添加appender.setLayout(),但现在在log4j 2.x中,没有诸如setLayout()这样的方法。如何在log4j2中以编程方式为Appender对象设置布局?
没有setLayout()方法。您将需要获取当前的配置并在运行时按照documentation中的说明进行更新。
您可以通过这种方式添加自己的布局(例如ConsoleAppender):
// rootLoggerConfig you can get from LoggerContext.getRootLogger().get()
String pattern = "%d [%p|%c|%C{1}] %m%n"; // your pattern here
PatternLayout pl = PatternLayout.newBuilder().withPattern(pattern).build();
ConsoleAppender consoleAppender = ConsoleAppender.createDefaultAppenderForLayout(pl);
rootLoggerConfig.addAppender(consoleAppender, Level.getLevel("INFO"), filter);
// filter - your implementation of
// org.apache.logging.log4j.core.filter.AbstractFilter
如果偶然,您只是想更改用于各种日志事件的模式,则可以使用模式选择器。否则,更好地了解用例可能会提供其他选择。实际上,我很想知道您为什么要以编程方式更改布局,因为很少有人要求这样做。