java—是否可以通过编程方式设置logback配置?

gstyhher  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(470)

我是新的logback,我想配置logback编程。目前我使用的静态配置如下:

<configuration>
    <appender name="KIWI" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>localhost:8080</syslogHost>
        <facility>LOCAL0</facility>
        <suffixPattern>%thread: %-5level %logger{36} - %msg%n</suffixPattern>
    </appender>

    <logger name="com.javacodegeeks.examples.logbacksyslogexample.message.kiwi" level="INFO">
        <appender-ref ref="KIWI" />
    </logger>
</configuration>

是否可以动态设置sysloghost?

vsnjm48y

vsnjm48y1#

是的,可以通过编程方式配置logback,您需要扩展contextawarebase并实现configurator,如下面的代码所示

public class MyLogbackConfigurer extends ContextAwareBase implements Configurator {
    @Override
    public void configure(LoggerContext lc) {
        addInfo("Setting up default configuration.");

        ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<ILoggingEvent>();
        ca.setContext(lc);
        ca.setName("console");
        LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>();
        encoder.setContext(lc);

        // same as
        // PatternLayout layout = new PatternLayout();
        // layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
        TTLLLayout layout = new TTLLLayout();

        layout.setContext(lc);
        layout.start();
        encoder.setLayout(layout);

        ca.setEncoder(encoder);
        ca.start();

        FileAppender f=new FileAppender();
        f.setEncoder(encoder);
        f.setLayout(layout);
        f.setContext(lc);
        f.setFile("log.log");
        f.setAppend(true);
        f.setName("logFile");
        f.start();

        Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
        rootLogger.addAppender(ca);
        rootLogger.addAppender(f);

        Logger springLogger = lc.getLogger("org.springframework");
        springLogger.setLevel(Level.WARN);

    }
}

您需要在src/main/resources/meta-inf/services/ch.qos.logback.classic.spi.configurator下创建一个文件,其中包含您的配置程序的类名。下面是我的示例和配置。
我以前没有使用syslogappender,但是您可以更改我给出的示例,您可以使用system.getproperty(“proname”)或system.getenv(“envname”)
在从头开始实现所有东西之前,您是否尝试过像下面这样更改xml?

<syslogHost>${SYSLOG}</syslogHost>

然后像这样运行jar“java-jaryourjarpath.jar-dsyslog=localhost:8080“这样您就不需要编写配置类详细文档。

相关问题