Log4j2:以编程方式在文件名中创建带有时间戳的文件追加器

时间:2017-11-30 17:40:22

标签: java logging log4j2

可以使用[property]配置创建为log4j2日志文件添加时间戳:

appender.FILE.type = FILE
appender.FILE.name = FILE
appender.FILE.fileName = file-with-date-${date:yyyy-MM-dd}.log
appender.FILE.layout.type = PatternLayout
appender.FILE.layout.pattern =[%p] %m%n

这将在file-with-date-2017-11-30.log中生成日志文件。如何使用编程配置实现相同的行为?这是我到目前为止所尝试的:

PatternLayout layout = PatternLayout.newBuilder()
            .withConfiguration(ctx.getConfiguration())
            .withPattern("%m%n").build();

FileAppender fileAppender = FileAppender.newBuilder()
        .withLayout(layout)
        .withFileName( "file-with-date-${date:yyyy-MM-dd}.log")
        .withName("pattern")
        .build();

但是这会生成以下文件:file-with-date-${date:yyyy-MM-dd}.log。因此,使用属性配置:包含当前日期的日志文件,使用以编程方式创建的appender ${date:yyyy-MM-dd}.log将被忽略。

1 个答案:

答案 0 :(得分:0)

显然StrSubstitutor可以在这种情况下提供帮助。

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
String fileName = config.
              getStrSubstitutor().replace("file-with-date-${date:yyyy-MM-dd}.log");

FileAppender fileAppender = FileAppender.newBuilder()
        .withLayout(layout)
        .withFileName(filename)
        .withName("pattern")
        .build();