【问题标题】:Log4j2 programmatic configuration Log filename issueLog4j2 编程配置日志文件名问题
【发布时间】:2016-02-29 03:27:41
【问题描述】:

我已经使用编程配置配置了 Log4j2。请在下面找到我的代码。我在 jdk1.8 上运行此代码。日志文件正在正确生成,但日志文件名没有按照定义的模式正确创建。文件将使用类似test_28_12_2016_24.log 的名称生成生成 看起来 SimpleDateFormat 没有被识别。如果我遗漏了什么,请告诉我。

public class Test {

    public static void main(String args[]){

        public final String LOG_FILE_PATTERN = "-%d{dd-MM-yyyy-HH}.%i.log";
        public final String MY_LOG_PATTERN_LAYOUT = "%msg%n";   

        /* Configuring Logger context */
        private LoggerContext context = (LoggerContext) LogManager.getContext(false);
        final Configuration config = context.getConfiguration();
        final Layout<? extends Serializable> layout = PatternLayout.createLayout(MY_LOG_PATTERN_LAYOUT, null, config, null,null,true, true, null, null);


        /* Configuring policies */
        final TimeBasedTriggeringPolicy timeBasedTriggeringPolicy = TimeBasedTriggeringPolicy.createPolicy(TimeUnit.DAYS.toMillis(1), "true");
        final SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy = SizeBasedTriggeringPolicy.createPolicy(1024*1024*10);
        final CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(timeBasedTriggeringPolicy,sizeBasedTriggeringPolicy);
        final DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy("50", "1", null,null, null, false, config);

        /* Creating appenders */
        final Appender appender = RollingFileAppender.createAppender("target/logs/test.log" , LOG_FILE_PATTERN, "true", "log-file-appender", null, null, "true", policy, strategy, layout, null, null, null, null, config);
        appender.start();
        AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
        AppenderRef[] refs = new AppenderRef[] {ref};

        /*Creating loggers*/
        LoggerConfig loggerConfig = LoggerConfig.createLogger("true", Level.ERROR, "FILE_LOGGER", "com.*", refs, null, config, null);
        loggerConfig.addAppender(appender,null,null);
        config.addLogger("logger" , loggerConfig);
        context.updateLoggers();
    }

    public void writelogs() {
        Logger logger = context.getLogger("logger");
        logger.error("test data");
    }
}

【问题讨论】:

    标签: log4j java-8 simpledateformat log4j2


    【解决方案1】:

    日志文件模式应该包含同一目录中多个日志的文件名,但我认为问题在于文件模式中没有正确的目录。它可能是在另一个目录中创建或创建文件失败。

    文件模式应该是这样的。

    "target/logs/test-%d{dd-MM-yyyy-HH}.%i.log"
    

    【讨论】:

    • 另外,您使用的是哪个版本的 log4j2?我知道至少 2.3 createPolicy() 方法接受一个字符串作为参数。即大小为“10MB”,时间为“1”
    • 至少我认为这不会产生所需的输出,并且还可能导致您的文件无法按预期翻转。 final TimeBasedTriggeringPolicy timeBasedTriggeringPolicy = TimeBasedTriggeringPolicy.createPolicy(TimeUnit.DAYS.toMillis(1), "true");
    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多