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

org.elasticsearch.common.xcontent.LoggingDeprecationHandler Maven / Gradle / Ivy

There is a newer version: 8.13.4
Show newest version
/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License
 * 2.0 and the Server Side Public License, v 1; you may not use this file except
 * in compliance with, at your election, the Elastic License 2.0 or the Server
 * Side Public License, v 1.
 */

package org.elasticsearch.common.xcontent;

import org.elasticsearch.common.TriConsumer;
import org.elasticsearch.common.logging.DeprecationCategory;
import org.elasticsearch.common.logging.DeprecationLogger;
import org.elasticsearch.xcontent.DeprecationHandler;
import org.elasticsearch.xcontent.ParseField;
import org.elasticsearch.xcontent.XContentLocation;

import java.util.function.Supplier;

/**
 * Logs deprecations to the {@link DeprecationLogger}.
 * 

* This is core's primary implementation of {@link DeprecationHandler} and * should absolutely be used everywhere where it parses * requests. It is much less appropriate when parsing responses from external * sources because it will report deprecated fields back to the user as * though the user sent them. */ public class LoggingDeprecationHandler implements DeprecationHandler { /** * The logger to which to send deprecation messages. *

* This uses ParseField's logger because that is the logger that * we have been using for many releases for deprecated fields. * Changing that will require some research to make super duper * sure it is safe. */ private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(ParseField.class); public static final LoggingDeprecationHandler INSTANCE = new LoggingDeprecationHandler(); private TriConsumer deprecationLoggerFunction = (message, params, field_name) -> deprecationLogger.warn( DeprecationCategory.API, "deprecated_field_" + field_name, message, params ); private TriConsumer compatibleLoggerFunction = (message, params, field_name) -> deprecationLogger .compatibleCritical("deprecated_field_" + field_name, message, params); private LoggingDeprecationHandler() { // one instance only } @Override public void logRenamedField(String parserName, Supplier location, String oldName, String currentName) { logRenamedField(parserName, location, oldName, currentName, false); } @Override public void logReplacedField(String parserName, Supplier location, String oldName, String replacedName) { logReplacedField(parserName, location, oldName, replacedName, false); } @Override public void logRemovedField(String parserName, Supplier location, String removedName) { logRemovedField(parserName, location, removedName, false); } @Override public void logRenamedField( String parserName, Supplier location, String oldName, String currentName, boolean isCompatibleDeprecation ) { String prefix = parserLocation(parserName, location); TriConsumer loggingFunction = getLoggingFunction(isCompatibleDeprecation); loggingFunction.apply( "{}Deprecated field [{}] used, expected [{}] instead", new Object[] { prefix, oldName, currentName }, oldName ); } @Override public void logReplacedField( String parserName, Supplier location, String oldName, String replacedName, boolean isCompatibleDeprecation ) { String prefix = parserLocation(parserName, location); TriConsumer loggingFunction = getLoggingFunction(isCompatibleDeprecation); loggingFunction.apply("{}Deprecated field [{}] used, replaced by [{}]", new Object[] { prefix, oldName, replacedName }, oldName); } @Override public void logRemovedField( String parserName, Supplier location, String removedName, boolean isCompatibleDeprecation ) { String prefix = parserLocation(parserName, location); TriConsumer loggingFunction = getLoggingFunction(isCompatibleDeprecation); loggingFunction.apply( "{}Deprecated field [{}] used, this field is unused and will be removed entirely", new Object[] { prefix, removedName }, removedName ); } private static String parserLocation(String parserName, Supplier location) { return parserName == null ? "" : "[" + parserName + "][" + location.get() + "] "; } private TriConsumer getLoggingFunction(boolean isCompatibleDeprecation) { if (isCompatibleDeprecation) { return compatibleLoggerFunction; } else { return deprecationLoggerFunction; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy