{"record":{"id":"bb425432ff4673b8","repo":"apache/cassandra","slug":"you-are-using-cassandra-with-an-unsupported-deploy","errorCode":null,"errorMessage":"You are using Cassandra with an unsupported deployment. The intended logging implementation library logback is not used by slf4j. Detected slf4j logger factory: {}. You will not be able to dynamically manage log levels via JMX and may have performance or other issues.","messagePattern":"You are using Cassandra with an unsupported deployment\\. The intended logging implementation library logback is not used by slf4j\\. Detected slf4j logger factory: (.+?)\\. You will not be able to dynamically manage log levels via JMX and may have performance or other issues\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/utils/logging/LoggingSupportFactory.java","lineNumber":54,"sourceCode":"    private LoggingSupportFactory() {}\n\n    /**\n     * @return An appropriate {@link LoggingSupport} implementation according to the used slf4j binding.\n     */\n    public static LoggingSupport getLoggingSupport()\n    {\n        if (loggingSupport == null)\n        {\n            // unfortunately, this is the best way to determine if logback is being used for logger\n            String loggerFactoryClass = LoggerFactory.getILoggerFactory().getClass().getName();\n            if (loggerFactoryClass.contains(\"logback\"))\n            {\n                loggingSupport = FBUtilities.instanceOrConstruct(\"org.apache.cassandra.utils.logging.LogbackLoggingSupport\", \"LogbackLoggingSupport\");\n            }\n            else\n            {\n                loggingSupport = new NoOpFallbackLoggingSupport();\n                logger.warn(\"You are using Cassandra with an unsupported deployment. The intended logging implementation library logback is not used by slf4j. Detected slf4j logger factory: {}. \"\n                            + \"You will not be able to dynamically manage log levels via JMX and may have performance or other issues.\", loggerFactoryClass);\n            }\n        }\n        return loggingSupport;\n    }\n}\n","sourceCodeStart":36,"sourceCodeEnd":61,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/utils/logging/LoggingSupportFactory.java#L36-L61","documentation":"At startup, LoggingSupportFactory inspects slf4j's LoggerFactory; if it is not Logback, Cassandra falls back to NoOpFallbackLoggingSupport and warns that the deployment is unsupported. Dynamic log-level management via JMX will not work and performance may suffer, because Cassandra expects logback as its logging backend.","triggerScenarios":"slf4j binds to a provider other than logback - e.g. a conflicting slf4j binding on the classpath, running Cassandra classes with a classpath that pulls in slf4j-simple/log4j, or a custom build packaging the wrong jars; getLoggingSupport detects the unexpected loggerFactoryClass.","commonSituations":"Adding tools/agents (or test harnesses) that bundle their own slf4j implementation into the classpath; custom distributions replacing logback; accidentally shipping both logback-classic and another binding so SLF4J picks the wrong provider.","solutions":["Check the detected factory class in the warning to see which binding won.","Remove conflicting slf4j bindings (e.g. slf4j-log4j12, slf4j-simple) from the classpath so only logback-classic remains.","Restore the stock Cassandra logback jar/config if a custom build altered logging dependencies.","Restart Cassandra and confirm the warning is gone; dynamic log-level JMX ops will then work.","If you cannot change the binding, accept the NoOp fallback - dynamic setLoggingLevel calls will silently do nothing."],"exampleFix":"// before: conflicting binding present: ls lib | grep slf4j shows slf4j-simple and logback-classic // after: remove the competing binding: rm lib/slf4j-simple-*.jar && restart cassandra","handlingStrategy":"validation","validationCode":"// verify the slf4j binding before starting Cassandra: Class<? extends ILoggerFactory> f = LoggerFactory.getILoggerFactory().getClass(); if (!f.getName().contains(\"Logback\")) throw new IllegalStateException(\"slf4j not bound to logback: \" + f.getName());","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep only logback-classic as the slf4j binding on the classpath.","Check logs at startup for this warning after any dependency change.","Do not bundle tools/agents that ship their own slf4j implementation into lib/.","Verify with nodetool getlogginglevels that dynamic logging works after upgrades."],"tags":["logging","slf4j","logback","classpath","configuration"],"backgroundTag":"unsupported-platform","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}