【问题标题】:Log4j2: Programmatically create file appender with timestamp in the filenameLog4j2:以编程方式在文件名中创建带有时间戳的文件附加程序
【发布时间】:2017-11-30 17:40:21
【问题描述】:

可以使用 [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。因此,使用属性配置:使用以编程方式创建的附加程序 ${date:yyyy-MM-dd}.log 创建具有当前日期的日志文件被忽略。

【问题讨论】:

标签: java logging log4j2


【解决方案1】:

显然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();

【讨论】:

    猜你喜欢
    • 2014-01-01
    • 2016-10-14
    • 2015-10-09
    • 2013-01-29
    • 2018-09-07
    • 2014-01-31
    • 2021-07-05
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多