简体   繁体   中英

Add File Appender using log4j2 programmatically at runtime

Now we migrating from log4j to log4j2. Configuration file is not changed (is includes only Console appender). We want to add File Appender at runtime, so log files are created but logs are not appeared. When we used log4j, we made this way:

    PatternLayout layout = new PatternLayout("%d - " + DEFAULT_CONVERSION_PATTERN);
    FileAppender fileAppender = new FileAppender(layout, file.getPath());
    fileAppender.setName("fileAppender");
    logger.removeAllAppenders();
    logger.addAppender(fileAppender);
    logger.addAppender(new ConsoleAppender(layout));

And it worked fine. But when we moved to log4j2, we started using this code:

    PatternLayout layout = PatternLayout.newBuilder().withPattern("%d - " + DEFAULT_CONVERSION_PATTERN).build();
    FileAppender fileAppender = FileAppender.newBuilder().setLayout(layout).withFileName(file.getPath())
                    .setName("fileAppender").build();
    LoggerContext.getContext().getLogger(name).getAppenders().clear();
    LoggerContext.getContext().getLogger(name).addAppender(fileAppender);
    LoggerContext.getContext().getLogger(name).addAppender(ConsoleAppender.newBuilder().setLayout(layout).build());

File is created but logs appear only in Console... Can someone help please with valid creating FileAppender?

From what you describe, it seems you successfully instantiated a FileAppender that is ready to log messages it receives, but somehow no message is passed to this Appender.

Somehow your code example calls a nonexisting method LoggerContext.getContext() - I believe this should be LoggerContextFactory.getContext() or LogManager.getContext(). And in total, you may want to check the example from the documentation .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM