小编Mic*_*vig的帖子

动态创建Logback Logger和Appender

我需要为动态加载和重新加载的类动态创建Logback记录器和各种位.我有一些可变数量的这些类,尽管它会少于150个.性能是一个很大的问题,这是一个高度线程和极其并发的环境,所以使用MDC的想法不会飞,因为当出现问题时可能会有数千次调用.我也不想直接将记录器传递给类,我希望他们只需使用getLogger就可以将它们拉出来.

每个类都必须将所有错误消息记录到它自己的错误文件中,并将所有错误消息记录到它自己的跟踪文件中.这两个文件都需要每晚滚动.此外,系统中记录的任何内容也必须最终出现在主系统日志中.

我已经创建了以下代码片段来尝试这个想法.它看起来像它可以工作,但结果不是我所期望的.这是可以直接运行的测试程序:

package logbacktesting;

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.filter.LevelFilter;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
import ch.qos.logback.core.spi.FilterReply;
import ch.qos.logback.core.util.StatusPrinter;
import org.slf4j.LoggerFactory;

public class Main {

    public static void main(String[] args) {

        Logger templateLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.myapp");
        LoggerContext loggerContext = templateLogger.getLoggerContext();

        String[] nameList = new String[] {"test1.class", "test2.class"};

        // Set up the pattern
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setContext(loggerContext);
        encoder.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
        encoder.start();

        // Spin over the names to create all the needed objects …
Run Code Online (Sandbox Code Playgroud)

java logging logback

12
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×1

logback ×1

logging ×1