All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.rocketmq.shade.ch.qos.logback.core.joran.JoranConfiguratorBase Maven / Gradle / Ivy

/**
 * Logback: the reliable, generic, fast and flexible logging framework.
 * Copyright (C) 1999-2022, QOS.ch. All rights reserved.
 *
 * This program and the accompanying materials are dual-licensed under
 * either the terms of the Eclipse Public License v1.0 as published by
 * the Eclipse Foundation
 *
 *   or (per the licensee's choosing)
 *
 * under the terms of the GNU Lesser General Public License version 2.1
 * as published by the Free Software Foundation.
 */
package org.apache.rocketmq.shade.ch.qos.logback.core.joran;

import org.apache.rocketmq.shade.ch.qos.logback.core.joran.action.*;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.conditional.ElseAction;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.conditional.IfAction;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.conditional.ThenAction;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.sanity.AppenderWithinAppenderSanityChecker;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.sanity.SanityChecker;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.spi.ElementSelector;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.spi.RuleStore;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.spi.SaxEventInterpretationContext;
import org.apache.rocketmq.shade.ch.qos.logback.core.joran.spi.SaxEventInterpreter;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.*;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.conditional.ElseModel;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.conditional.IfModel;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.conditional.ThenModel;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.processor.*;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.processor.conditional.ElseModelHandler;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.processor.conditional.IfModelHandler;
import org.apache.rocketmq.shade.ch.qos.logback.core.model.processor.conditional.ThenModelHandler;
import org.apache.rocketmq.shade.ch.qos.logback.core.sift.SiftModelHandler;
import org.apache.rocketmq.shade.ch.qos.logback.core.spi.ContextAware;

// Based on 310985 revision 310985 as attested by http://tinyurl.com/8njps
// see also http://tinyurl.com/c2rp5

/**
 * A JoranConfiguratorBase lays most of the groundwork for concrete
 * configurators derived from it. Concrete configurators only need to implement
 * the {@link #addElementSelectorAndActionAssociations} method.
 * 

* A JoranConfiguratorBase instance should not be used more than once to * configure a Context. * * @author Ceki Gülcü */ abstract public class JoranConfiguratorBase extends GenericXMLConfigurator { @Override protected void addElementSelectorAndActionAssociations(RuleStore rs) { // is "*/variable" referenced in the docs? rs.addRule(new ElementSelector("*/variable"), PropertyAction::new); rs.addRule(new ElementSelector("*/property"), PropertyAction::new); // substitutionProperty is deprecated rs.addRule(new ElementSelector("*/substitutionProperty"), PropertyAction::new); rs.addRule(new ElementSelector("configuration/import"), ImportAction::new); rs.addRule(new ElementSelector("configuration/timestamp"), TimestampAction::new); rs.addRule(new ElementSelector("configuration/shutdownHook"), ShutdownHookAction::new); rs.addRule(new ElementSelector("configuration/sequenceNumberGenerator"), SequenceNumberGeneratorAction::new); rs.addRule(new ElementSelector("configuration/define"), DefinePropertyAction::new); rs.addRule(new ElementSelector("configuration/evaluator"), EventEvaluatorAction::new); // the contextProperty pattern is deprecated. It is undocumented // and will be dropped in future versions of logback rs.addRule(new ElementSelector("configuration/contextProperty"), ContextPropertyAction::new); rs.addRule(new ElementSelector("configuration/conversionRule"), ConversionRuleAction::new); rs.addRule(new ElementSelector("configuration/statusListener"), StatusListenerAction::new); rs.addRule(new ElementSelector("*/appender"), AppenderAction::new); rs.addRule(new ElementSelector("configuration/appender/appender-ref"), AppenderRefAction::new); rs.addRule(new ElementSelector("configuration/newRule"), NewRuleAction::new); rs.addRule(new ElementSelector("*/param"), ParamAction::new); // add if-then-else support rs.addRule(new ElementSelector("*/if"), IfAction::new); rs.addTransparentPathPart("if"); rs.addRule(new ElementSelector("*/if/then"), ThenAction::new); rs.addTransparentPathPart("then"); rs.addRule(new ElementSelector("*/if/else"), ElseAction::new); rs.addTransparentPathPart("else"); rs.addRule(new ElementSelector("configuration/appender/sift"), SiftAction::new); rs.addTransparentPathPart("sift"); } /** * Perform sanity check and issue warning if necessary. * * @param topModel */ protected void sanityCheck(Model topModel) { performCheck(new AppenderWithinAppenderSanityChecker(), topModel); } protected void performCheck(SanityChecker sc, Model model) { if(sc instanceof ContextAware) ((ContextAware) sc).setContext(context); sc.check(model); } @Override protected void setImplicitRuleSupplier(SaxEventInterpreter interpreter) { interpreter.setImplicitActionSupplier( ImplicitModelAction::new ); } @Override public void buildModelInterpretationContext() { super.buildModelInterpretationContext(); modelInterpretationContext.createAppenderBags(); } public SaxEventInterpretationContext getInterpretationContext() { return saxEventInterpreter.getSaxEventInterpretationContext(); } @Override protected void addModelHandlerAssociations(DefaultProcessor defaultProcessor) { defaultProcessor.addHandler(ImportModel.class, ImportModelHandler::makeInstance); defaultProcessor.addHandler(ShutdownHookModel.class, ShutdownHookModelHandler::makeInstance); defaultProcessor.addHandler(SequenceNumberGeneratorModel.class, SequenceNumberGeneratorModelHandler::makeInstance); defaultProcessor.addHandler(EventEvaluatorModel.class, EventEvaluatorModelHandler::makeInstance); defaultProcessor.addHandler(DefineModel.class, DefineModelHandler::makeInstance); defaultProcessor.addHandler(IncludeModel.class, NOPModelHandler::makeInstance); defaultProcessor.addHandler(ParamModel.class, ParamModelHandler::makeInstance); defaultProcessor.addHandler(PropertyModel.class, PropertyModelHandler::makeInstance); defaultProcessor.addHandler(TimestampModel.class, TimestampModelHandler::makeInstance); defaultProcessor.addHandler(StatusListenerModel.class, StatusListenerModelHandler::makeInstance); defaultProcessor.addHandler(ImplicitModel.class, ImplicitModelHandler::makeInstance); defaultProcessor.addHandler(IfModel.class, IfModelHandler::makeInstance); defaultProcessor.addHandler(ThenModel.class, ThenModelHandler::makeInstance); defaultProcessor.addHandler(ElseModel.class, ElseModelHandler::makeInstance); defaultProcessor.addHandler(SiftModel.class, SiftModelHandler::makeInstance); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy