001/* 002 * Logback: the reliable, generic, fast and flexible logging framework. 003 * Copyright (C) 1999-2023, QOS.ch. All rights reserved. 004 * 005 * This program and the accompanying materials are dual-licensed under 006 * either the terms of the Eclipse Public License v1.0 as published by 007 * the Eclipse Foundation 008 * 009 * or (per the licensee's choosing) 010 * 011 * under the terms of the GNU Lesser General Public License version 2.1 012 * as published by the Free Software Foundation. 013 */ 014 015package ch.qos.logback.core.joran; 016 017import ch.qos.logback.core.Context; 018import ch.qos.logback.core.model.*; 019import ch.qos.logback.core.model.conditional.ByPropertiesConditionModel; 020import ch.qos.logback.core.model.conditional.ElseModel; 021import ch.qos.logback.core.model.conditional.IfModel; 022import ch.qos.logback.core.model.conditional.ThenModel; 023import ch.qos.logback.core.model.processor.*; 024import ch.qos.logback.core.model.processor.conditional.ByPropertiesConditionModelHandler; 025import ch.qos.logback.core.model.processor.conditional.ElseModelHandler; 026import ch.qos.logback.core.model.processor.conditional.IfModelHandler; 027import ch.qos.logback.core.model.processor.conditional.ThenModelHandler; 028import ch.qos.logback.core.sift.SiftModelHandler; 029 030/** 031 * For a given DefaultProcessor instance link a {@link ch.qos.logback.core.model.Model Model} class to 032 * a {@link ch.qos.logback.core.model.processor.ModelHandlerBase ModelHandler} instance in logback-core. 033 * 034 * <p>Derived classes are likely to add further links.</p> 035 * 036 * @since 1.3.9/1.4.9 037 */ 038public class ModelClassToModelHandlerLinkerBase { 039 040 041 protected Context context; 042 043 public ModelClassToModelHandlerLinkerBase(Context context) { 044 this.context = context; 045 } 046 047 public void link(DefaultProcessor defaultProcessor) { 048 defaultProcessor.addHandler(ImportModel.class, ImportModelHandler::makeInstance); 049 050 defaultProcessor.addHandler(ShutdownHookModel.class, ShutdownHookModelHandler::makeInstance); 051 defaultProcessor.addHandler(SequenceNumberGeneratorModel.class, SequenceNumberGeneratorModelHandler::makeInstance); 052 defaultProcessor.addHandler(SerializeModelModel.class, SerializeModelModelHandler::makeInstance); 053 054 defaultProcessor.addHandler(EventEvaluatorModel.class, EventEvaluatorModelHandler::makeInstance); 055 defaultProcessor.addHandler(ConversionRuleModel.class, ConversionRuleModelHandler::makeInstance); 056 057 defaultProcessor.addHandler(DefineModel.class, DefineModelHandler::makeInstance); 058 defaultProcessor.addHandler(IncludeModel.class, IncludeModelHandler::makeInstance); 059 060 061 defaultProcessor.addHandler(ParamModel.class, ParamModelHandler::makeInstance); 062 defaultProcessor.addHandler(PropertyModel.class, PropertyModelHandler::makeInstance); 063 defaultProcessor.addHandler(TimestampModel.class, TimestampModelHandler::makeInstance); 064 defaultProcessor.addHandler(StatusListenerModel.class, StatusListenerModelHandler::makeInstance); 065 defaultProcessor.addHandler(ImplicitModel.class, ImplicitModelHandler::makeInstance); 066 067 068 defaultProcessor.addHandler(ByPropertiesConditionModel.class, ByPropertiesConditionModelHandler::makeInstance); 069 defaultProcessor.addHandler(IfModel.class, IfModelHandler::makeInstance); 070 defaultProcessor.addHandler(ThenModel.class, ThenModelHandler::makeInstance); 071 defaultProcessor.addHandler(ElseModel.class, ElseModelHandler::makeInstance); 072 073 defaultProcessor.addHandler(SiftModel.class, SiftModelHandler::makeInstance); 074 } 075 076 // The final filters in the two filter chain are rather crucial. 077 // They ensure that only Models attached to the firstPhaseFilter will 078 // be handled in the first phase and all models not previously handled 079 // in the second phase will be handled in a catch-all fallback case. 080 protected void sealModelFilters(DefaultProcessor defaultProcessor) { 081 defaultProcessor.getPhaseOneFilter().denyAll(); 082 defaultProcessor.getPhaseTwoFilter().allowAll(); 083 } 084}