diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/rule/RuleExecutor.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/rule/RuleExecutor.java index e4a5423d35f8e..7ee70b029031d 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/rule/RuleExecutor.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/rule/RuleExecutor.java @@ -21,6 +21,25 @@ public abstract class RuleExecutor> { private final Logger log = LogManager.getLogger(getClass()); + /** + * Sub-logger intended to show only changes made by the rules. Intended for debugging. + * + * Enable it like this for the respective optimizers and the analyzer, resp. all inheritors of this class: + *
{@code
+     * PUT localhost:9200/_cluster/settings
+     *
+     * {
+     *   "transient" : {
+     *     "logger.org.elasticsearch.xpack.esql.analysis.Analyzer.changes": "TRACE",
+     *     "logger.org.elasticsearch.xpack.esql.optimizer.LogicalPlanOptimizer.changes": "TRACE",
+     *     "logger.org.elasticsearch.xpack.esql.optimizer.LocalLogicalPlanOptimizer.changes": "TRACE",
+     *     "logger.org.elasticsearch.xpack.esql.optimizer.PhysicalPlanOptimizer.changes": "TRACE",
+     *     "logger.org.elasticsearch.xpack.esql.optimizer.LocalPhysicalPlanOptimizer.changes": "TRACE"
+     *   }
+     * }
+     * }
+ */ + private final Logger changeLog = LogManager.getLogger(getClass().getName() + ".changes"); public static class Limiter { public static final Limiter DEFAULT = new Limiter(100); @@ -174,8 +193,8 @@ protected final ExecutionInfo executeWithInfo(TreeType plan) { if (tf.hasChanged()) { hasChanged = true; - if (log.isTraceEnabled()) { - log.trace("Rule {} applied with change\n{}", rule, NodeUtils.diffString(tf.before, tf.after)); + if (changeLog.isTraceEnabled()) { + changeLog.trace("Rule {} applied with change\n{}", rule, NodeUtils.diffString(tf.before, tf.after)); } } else { if (log.isTraceEnabled()) {