0

我正在使用以下代码以编程方式创建附加程序-

   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) 或配置生成器创建的其他记录器可以正常打印异常。

4

0 回答 0