Есть ли способ создать RollingFileAppender программно? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь создать регистратор и приложение для моего проекта, но он должен быть настраиваемым, поэтому я собирался настроить его программно.

Проблема возникает, когда я пытаюсь импортировать "import ch.qos.logback.core.rolling.RollingFileAppender;"

но это выдает мне ошибку: «Тип ch.qos.logback.core.rolling.RollingFileAppender недоступен»

Странная часть в том, что в строке, которую я использую класс RollingFileAppender, он рекомендует мне тот же импорт.

У меня есть logback-classic-1.3.0-alpha4.jar и logback-core-1.3.0-alpha4.jar в модуле pathp и module-info.jar:

module tool.foo {
    requires com.fazecast.jSerialComm;
    requires commons.cli;
    requires java.desktop;
    requires java.xml;
    requires java.naming;
    requires java.net.http;
    requires org.slf4j;
    requires swt;
    requires ch.qos.logback.core;
    requires ch.qos.logback.classic;

    requires static org.junit.jupiter.api;
    requires static org.junit.jupiter.params;
    requires static org.junit.jupiter.engine;

    exports com.enterprise.tools.foo;
}

Класс выглядит так:

package com.premium.tools.pamtool.controller;

import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.rolling.RollingFileAppender;

public class CsvLogger {

    public static Logger createLoggerFor(String file) {
        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        PatternLayoutEncoder ple = new PatternLayoutEncoder();

        ple.setPattern("%msg");
        ple.setContext(lc);
        ple.start();
        RollingFileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<ILoggingEvent>();
        fileAppender.setFile(file);
        fileAppender.setEncoder(ple);
        fileAppender.setContext(lc);
        fileAppender.setAppend(false);
        fileAppender.start();

        Logger logger = (Logger) LoggerFactory.getLogger("CsvLogger");
        logger.addAppender(fileAppender);
        logger.setLevel(Level.INFO);
        logger.setAdditive(false); /* set to true if root should log too */
        return logger;
    }

}
...