{"record":{"id":"1fdb2dfe94b73a9e","repo":"quarkusio/quarkus","slug":"tracing-not-enabled","errorCode":null,"errorMessage":"Tracing not enabled","messagePattern":"Tracing not enabled","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"independent-projects/qute/core/src/main/java/io/quarkus/qute/Engine.java","lineNumber":205,"sourceCode":"     * Returns the {@link TraceManager} responsible for managing trace listeners and\n     * firing trace events during template rendering.\n     *\n     * @return the trace manager instance or {@code null} if tracing is disabled\n     * @see EngineBuilder#enableTracing(boolean)\n     */\n    TraceManager getTraceManager();\n\n    /**\n     * Registers a new {@link TraceListener} to receive trace events.\n     * <p>\n     * The listener will be notified of template rendering and resolution events.\n     *\n     * @param listener the trace listener to add; must not be {@code null}\n     */\n    default void addTraceListener(TraceListener listener) {\n        TraceManager manager = getTraceManager();\n        if (manager == null) {\n            throw new IllegalStateException(\"Tracing not enabled\");\n        }\n        manager.addTraceListener(listener);\n    }\n\n    /**\n     * Unregisters a previously registered {@link TraceListener}.\n     * <p>\n     * After removal, the listener will no longer receive trace events.\n     *\n     * @param listener the trace listener to remove; must not be {@code null}\n     */\n    default void removeTraceListener(TraceListener listener) {\n        TraceManager manager = getTraceManager();\n        if (manager == null) {\n            throw new IllegalStateException(\"Tracing not enabled\");\n        }\n        manager.removeTraceListener(listener);\n    }","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/qute/core/src/main/java/io/quarkus/qute/Engine.java#L187-L223","documentation":"Engine.addTraceListener() registers a TraceListener with the engine's TraceManager. Tracing is an opt-in engine feature; if the engine was built without trace support getTraceManager() returns null and this IllegalStateException is thrown.","triggerScenarios":"Calling engine.addTraceListener(listener) on an Engine built without trace enabled (no TraceManager configured via EngineBuilder).","commonSituations":"Developers adding template debugging/tracing after building the engine with plain Engine.builder() without enabling tracing, or in tests that assume tracing is on by default.","solutions":["Enable tracing when building the engine: builder.traceManager(new TraceManager()) (or the builder's trace-enabling API) before build()","Check engine.getTraceManager() != null before registering listeners","If tracing is not needed, remove the listener registration call"],"exampleFix":"// before\nEngine engine = Engine.builder().addDefaults().build();\nengine.addTraceListener(listener); // throws\n// after\nEngine engine = Engine.builder().addDefaults().traceManager(new TraceManager()).build();\nengine.addTraceListener(listener);","handlingStrategy":"type-guard","validationCode":"if (engine.getTraceManager() == null) {\n    throw new IllegalStateException(\"Enable tracing on the EngineBuilder before adding trace listeners\");\n}","typeGuard":"boolean tracingEnabled(Engine engine) { return engine.getTraceManager() != null; }","tryCatchPattern":"try {\n    engine.addTraceListener(listener);\n} catch (IllegalStateException e) {\n    // tracing disabled — rebuild engine with a TraceManager or skip registration\n}","preventionTips":["Always build engines needing tracing with a TraceManager","Centralize engine construction in one factory","Null-check getTraceManager() before listener add/remove","Document tracing requirements in test fixtures"],"tags":["qute","templates","tracing","illegal-state"],"backgroundTag":"tracing-not-enabled","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}