{"record":{"id":"b0273d1f44adaa0c","repo":"fluent/fluentd","slug":"unknown-severity-severity","errorCode":null,"errorMessage":"Unknown severity: #{severity}","messagePattern":"Unknown severity: #(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"lib/fluent/log/console_adapter.rb","lineNumber":55,"sourceCode":"        @logger = logger\n        # When `verbose` is `true`, following items will be added as a prefix or\n        # suffix of the subject:\n        #   * Severity\n        #   * Object ID\n        #   * PID\n        #   * Time\n        # Severity and Time are added by Fluentd::Log too so they are redundant.\n        # PID is the worker's PID so it's also redundant.\n        # Object ID will be too verbose in usual cases.\n        # So set it as `false` here to suppress redundant items.\n        super(StringIO.new, verbose: false)\n      end\n\n      def call(subject = nil, *arguments, name: nil, severity: 'info', **options, &block)\n        if LEVEL_TEXT.include?(severity.to_s)\n          level = severity\n        else\n          @logger.warn(\"Unknown severity: #{severity}\")\n          level = 'warn'\n        end\n\n        @stream.seek(0)\n        @stream.truncate(0)\n        super\n        @logger.send(level, @stream.string.chomp)\n      end\n    end\n  end\nend\n","sourceCodeStart":37,"sourceCodeEnd":67,"githubUrl":"https://github.com/fluent/fluentd/blob/dd45c6e18dc7be33b5e5a0f0767bf46307ff5626/lib/fluent/log/console_adapter.rb#L37-L67","documentation":"Fluent::Plugin::ConsoleAdapter (lib/fluent/log/console_adapter.rb) bridges Console-style logger calls from embedded gems into Fluentd's log. When a caller invokes it with a severity: that is not one of the recognized level names (LEVEL_TEXT: trace/debug/info/warn/error/fatal), it warns, downgrades the message to 'warn', and still logs it via @logger.send('warn', ...).","triggerScenarios":"A gem routing its logging through the Console adapter passes a syslog-style severity such as :warning, :notice, :err, :critical, or :emergency, or a typo'd/nil severity string, none of which match LEVEL_TEXT.","commonSituations":"Bundling gems (async libraries, HTTP server helpers) whose Console logger uses syslog level names; custom plugins copying console-gem idioms into Fluentd helpers.","solutions":["Map the offending gem's severity names to Fluentd levels (notice→info, err/error→error, warning→warn, etc.) at the adapter boundary or via a wrapper logger.","Patch/upgrade the gem to emit standard Console/Fluentd severity names.","Contribute an upstream translation table to Fluentd's ConsoleAdapter for syslog-style severities."],"exampleFix":"# before (gem emits a syslog-style severity; adapter warns and downgrades to warn)\nConsoleAdapter.call('worker', severity: :notice)\n\n# after (normalize severity before it reaches the adapter)\nSEVERITY_MAP = { notice: 'info', warning: 'warn', err: 'error', critical: 'error', emergency: 'fatal' }.freeze\nsev = SEVERITY_MAP[raw_severity] || raw_severity\nConsoleAdapter.call('worker', severity: sev)","handlingStrategy":"validation","validationCode":"FLUENT_SEVERITIES = %w[trace debug info warn error fatal].freeze\nsev = 'notice'\nsev = { 'notice' => 'info', 'warning' => 'warn', 'err' => 'error' }[sev] || sev unless FLUENT_SEVERITIES.include?(sev)\nConsoleAdapter.call('component', severity: sev)","typeGuard":"FLUENT_SEVERITIES.include?(severity.to_s) # true => safe to pass severity through unchanged","tryCatchPattern":null,"preventionTips":["Wrap third-party Console-style loggers with a severity mapper before wiring them into Fluentd.","Whitelist severities at your logging facade boundary; default unknown ones to 'info' rather than letting them leak through.","Test gem log integration with syslog-style levels (notice, err) before shipping."],"tags":["logging","log-level","console-adapter"],"backgroundTag":"invalid-log-level","analyzedSha":"dd45c6e18dc7be33b5e5a0f0767bf46307ff5626","analyzedAt":"2026-08-21T16:22:07.332Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}