{"record":{"id":"8cc7e8410edcfe8e","repo":"alexreisner/geocoder","slug":"please-specify-valid-logger-for-geocoder-logger-specified","errorCode":null,"errorMessage":"Please specify valid logger for Geocoder. Logger specified must be :kernel or must respond to `add(level, message)`.","messagePattern":"Please specify valid logger for Geocoder\\. Logger specified must be :kernel or must respond to `add\\(level, message\\)`\\.","errorType":"exception","errorClass":"Geocoder::ConfigurationError","httpStatus":null,"severity":"error","filePath":"lib/geocoder/logger.rb","lineNumber":27,"sourceCode":"  class Logger\n    include Singleton\n\n    SEVERITY = {\n      debug: ::Logger::DEBUG,\n      info: ::Logger::INFO,\n      warn: ::Logger::WARN,\n      error: ::Logger::ERROR,\n      fatal: ::Logger::FATAL\n    }\n\n    def log(level, message)\n      unless valid_level?(level)\n        raise StandardError, \"Geocoder tried to log a message with an invalid log level.\"\n      end\n      if current_logger.respond_to? :add\n        current_logger.add(SEVERITY[level], message)\n      else\n        raise Geocoder::ConfigurationError, \"Please specify valid logger for Geocoder. \" +\n        \"Logger specified must be :kernel or must respond to `add(level, message)`.\"\n      end\n      nil\n    end\n\n    private # ----------------------------------------------------------------\n\n    def current_logger\n      logger = Geocoder.config[:logger]\n      if logger == :kernel\n        logger = Geocoder::KernelLogger.instance\n      end\n      logger\n    end\n\n    def valid_level?(level)\n      SEVERITY.keys.include?(level)\n    end","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/alexreisner/geocoder/blob/c10bd701215110ebe65da1c8b8b410b124208fd2/lib/geocoder/logger.rb#L9-L45","documentation":"Geocoder::ConfigurationError raised when the configured logger neither is :kernel nor responds to add(level, message). Geocoder requires a stdlib Logger-compatible object so it can write log entries through Logger#add.","triggerScenarios":"Setting Geocoder.configure(logger: some_object) where some_object is a string, nil-with-invalid-config, a custom class without an #add method, or anything other than a Logger instance / :kernel.","commonSituations":"Passing Rails.logger before it is initialized, assigning a custom log wrapper that lacks #add, or configuring logger: :syslog expecting built-in support.","solutions":["Configure a ::Logger instance: Geocoder.configure(logger: Logger.new(STDOUT))","Use logger: :kernel to log via Kernel (puts)","Add an #add(level, message) method to your custom logger object","Use Rails.logger, which responds to :add"],"exampleFix":"// before\nGeocoder.configure(logger: MyLogger)  # class object, no #add\n// after\nGeocoder.configure(logger: Logger.new($stdout))","handlingStrategy":"type-guard","validationCode":"raise unless logger == :kernel || logger.respond_to?(:add)","typeGuard":"def valid_geocoder_logger?(l); l == :kernel || l.respond_to?(:add); end","tryCatchPattern":"begin\n  Geocoder.search(q)\nrescue Geocoder::ConfigurationError => e\n  Geocoder.configure(logger: Logger.new($stdout))\n  retry\nend","preventionTips":["Use ::Logger or Rails.logger instances","Test logger config at boot time in an initializer","Avoid passing classes or objects lacking #add"],"tags":["ruby","logging","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"c10bd701215110ebe65da1c8b8b410b124208fd2","analyzedAt":"2026-09-15T23:43:32.125Z","contentChangedAt":"2026-09-15T23:43:32.125Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}