001/*
002 * Logback: the reliable, generic, fast and flexible logging framework.
003 * Copyright (C) 1999-2026, 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 v2.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.classic.model.processor;
016
017import ch.qos.logback.classic.model.ContextNameModel;
018import ch.qos.logback.core.Context;
019import ch.qos.logback.core.model.Model;
020import ch.qos.logback.core.model.processor.ModelHandlerBase;
021import ch.qos.logback.core.model.processor.ModelHandlerException;
022import ch.qos.logback.core.model.processor.ModelInterpretationContext;
023
024public class ContextNameModelHandler extends ModelHandlerBase {
025
026    public ContextNameModelHandler(Context context) {
027        super(context);
028    }
029
030    static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) {
031        return new ContextNameModelHandler(context);
032    }
033
034    @Override
035    protected Class<ContextNameModel> getSupportedModelClass() {
036        return ContextNameModel.class;
037    }
038
039    @Override
040    public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException {
041        ContextNameModel contextNameModel = (ContextNameModel) model;
042
043        String finalBody = mic.subst(contextNameModel.getBodyText());
044        addInfo("Setting logger context name as [" + finalBody + "]");
045        try {
046            context.setName(finalBody);
047        } catch (IllegalStateException e) {
048            addError("Failed to rename context [" + context.getName() + "] as [" + finalBody + "]", e);
049        }
050
051    }
052
053}