首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何手动创建SiftingAppender

如何手动创建SiftingAppender
EN

Stack Overflow用户
提问于 2013-02-13 23:56:33
回答 1查看 567关注 0票数 2

我想手动管理登录配置-具体地说,我想在必要时创建一个具有FileAppender的新SiftingAppender。

我尝试创建所有对象,以便复制我以前使用过的相同XML配置。不幸的是,我不知道如何将文件附加器附加到siftappender上。

下面是我使用的代码:

代码语言:javascript
复制
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();

PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(loggerContext);
encoder.setPattern("<%d(yyyy-MM-dd HH:mm:ss)> | %.-1level | %msg %n");
encoder.start();

FileAppender<ILoggingEvent> fAppender = new FileAppender<ILoggingEvent>();
fAppender.setContext(loggerContext);
fAppender.setName(application + "_" + user);
fAppender.setFile(logUser);
fAppender.setAppend(true);
fAppender.setEncoder(encoder);
fAppender.start();

MDCBasedDiscriminator discriminator = new MDCBasedDiscriminator();
discriminator.setKey("userid");
discriminator.setDefaultValue("unknown");
discriminator.start();

LevelFilter lFilter = new LevelFilter();
lFilter.setLevel(Level.INFO);
lFilter.start();

// **HOW TO ATTACH fAppender on sAppender ????**
SiftingAppender sAppender = new SiftingAppender();
sAppender.setContext(loggerContext);
sAppender.setName(application + "_" + user + "_SIFTING");
sAppender.addFilter(lFilter);
sAppender.setDiscriminator(discriminator);
sAppender.start();

Logger logger = loggerContext.getLogger("test.mypackage");
logger.setAdditive(false);
logger.setLevel(Level.ALL);
logger.addAppender(sAppender);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-25 19:02:05

您必须创建一个appenderFactory并将此工厂添加到siftingAppender中:

代码语言:javascript
复制
    SiftingAppender siftAppender = new SiftingAppender();

    AppenderFactory<ILoggingEvent> appenderFactory = new AppenderFactory<ILoggingEvent>() {

        @Override
        public Appender<ILoggingEvent> buildAppender(Context context, String discriminatingValue) throws JoranException {
            /* Create your file appender here, with what ever options you need */

            PatternLayoutEncoder ple = new PatternLayoutEncoder();
            ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
            ple.setContext(context);
            ple.start();
            FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
            fileAppender.setFile(file);
            fileAppender.setEncoder(ple);
            fileAppender.setContext(context);
            fileAppender.start();

            return fileAppender;
        }
    };

    /* set your factory to the sifting appender */
    siftAppender.setAppenderFactory(appenderFactory );
    siftAppender.setContext(context);
    siftAppender.setName("TMP");
    siftAppender.start();

    logger.addAppender(siftAppender);
    logger.setAdditive(true);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14857558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档