我正在使用以下代码以编程方式创建附加程序-
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
Layout layout = PatternLayout.createLayout("[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n", null, config, null, null, false, false, null, null);
Appender appender = FileAppender.createAppender("logging2.log", "false", "false", "File", "true",
"false", "false", "4000", layout, null, "false", null, config);
appender.start();
config.addAppender(appender);
AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
AppenderRef[] refs = new AppenderRef[] {ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.DEBUG, "com2",
"true", refs, null, config, null );
loggerConfig.addAppender(appender, null, null);
config.addLogger("com2", loggerConfig);
ctx.updateLoggers();
问题 1- createLayout、createAppender 和 createLogger 方法已弃用。但是我看不到在初始化配置后添加附加程序的另一种替代方法。
问题 2- 当我尝试将任何异常打印到使用上述代码创建的日志文件中时,它不会被打印。下面是代码-
public class Use {
private static Logger logger2 = LogManager.getLogger("com2");
public static void printlogs(LoggerContext ctx,Configuration config ){
org.apache.logging.log4j.core.Logger loggerImpl = (org.apache.logging.log4j.core.Logger) logger2;
Appender appender = loggerImpl.getAppenders().get("RollingFile");
try {
String Filename= ((RollingFileAppender) appender).getFileName(); //This will
//throw null pointer exception as there is no RollingFile Appender
//and hence appender is null
} catch (Exception e) {
logger2.error("Printing Exception", e);
}
}
}
logging2.log 内容-
[ERROR] 2022-02-02 15:20:23.430 [main] com2 - Printing Exception
使用从配置文件 (log4J2.properties) 或配置生成器创建的其他记录器可以正常打印异常。