apache/cassandra · warning

The log level was not changed, because you are using an…

Error message

The log level was not changed, because you are using an unsupported slf4j logging implementation for which this functionality was not implemented.

What it means

NoOpFallbackLoggingSupport is used when slf4j is not backed by logback; its setLoggingLevel cannot change any log level, so it merely logs this warning and returns. JMX or nodetool calls to set log levels silently have no effect in this unsupported configuration.

Solutions

  1. Fix the logging binding so logback-classic backs slf4j (see the 'unsupported deployment' startup warning), enabling real level changes.
  2. Verify the change took effect via nodetool getlogginglevels; if nothing changed, you are on the NoOp fallback.
  3. As a workaround, edit conf/logback.xml and restart the node (or use a scanning config for periodic reload).
  4. Confirm which slf4j provider is active (check classpath/logs) before relying on dynamic level changes.

Example fix

// before: expecting effect: nodetool setlogginglevel org.apache.cassandra DEBUG (no-op, only warns) // after: ensure logback binding, then: nodetool setlogginglevel org.apache.cassandra DEBUG && nodetool getlogginglevels (verify)
Defensive patterns

Strategy: fallback

Validate before calling

// check whether dynamic logging is available before calling: if (!(LoggerFactory.getILoggerFactory() instanceof ch.qos.logback.classic.LoggerContext)) { editLogbackXmlAndReloadInstead(); }

Try / catch

try { ssProxy.setLoggingLevel("org.apache.cassandra", "DEBUG"); } finally { if (ssProxy.getLoggingLevels().isEmpty()) applyLevelViaLogbackXml(); }

Prevention

When it happens

Trigger: Calling nodetool setlogginglevel (or the setLoggingLevel JMX operation, StorageService.setLoggingLevel) while Cassandra runs with a non-logback slf4j binding, causing NoOpFallbackLoggingSupport.setLoggingLevel to execute.

Common situations: Operators adjusting log verbosity during an incident on a misbuilt deployment without logback; automation scripts calling setlogginglevel that appear to succeed but change nothing.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/7ae0784badd485f2. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/utils/logging/NoOpFallbackLoggingSupport.java:39

import java.util.Collections;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A fallback implementation with empty implementations which ensures other slf4j bindings (logging implementations)
 * than the default supported framework can be used. This loses functionality, but is perfectly fine for most
 * integration test requirements of applications using an embedded cassandra server.
 */
public class NoOpFallbackLoggingSupport implements LoggingSupport
{
    private static final Logger logger = LoggerFactory.getLogger(NoOpFallbackLoggingSupport.class);

    @Override
    public void setLoggingLevel(String classQualifier, String rawLevel) throws Exception
    {
        logger.warn("The log level was not changed, because you are using an unsupported slf4j logging implementation for which this functionality was not implemented.");
    }

    @Override
    public Map<String, String> getLoggingLevels()
    {
        logger.warn("An empty map of logger names and their logging levels was returned, because you are using an unsupported slf4j logging implementation for which this functionality was not implemented.");
        return Collections.emptyMap();
    }
}

View on GitHub (pinned to 88fd0f6a0e)