alexreisner/geocoder · error · Geocoder::ConfigurationError
Please specify valid logger for Geocoder. Logger specified…
Error message
Please specify valid logger for Geocoder. Logger specified must be :kernel or must respond to `add(level, message)`.
What it means
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.
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
Example fix
// before Geocoder.configure(logger: MyLogger) # class object, no #add // after Geocoder.configure(logger: Logger.new($stdout))
Defensive patterns
Strategy: type-guard
Validate before calling
raise unless logger == :kernel || logger.respond_to?(:add)
Type guard
def valid_geocoder_logger?(l); l == :kernel || l.respond_to?(:add); end
Try / catch
begin Geocoder.search(q) rescue Geocoder::ConfigurationError => e Geocoder.configure(logger: Logger.new($stdout)) retry end
Prevention
- Use ::Logger or Rails.logger instances
- Test logger config at boot time in an initializer
- Avoid passing classes or objects lacking #add
When it happens
Trigger: 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.
Common situations: Passing Rails.logger before it is initialized, assigning a custom log wrapper that lacks #add, or configuring logger: :syslog expecting built-in support.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Geocoder tried to log a message with an invalid log level.
- Error parsing # proxy URL: '#
- Please specify a valid lookup for Geocoder
- region_code '# ' is invalid. use one of #…
- The # API requires a key to be configured: #
AI-assisted analysis of alexreisner/geocoder@c10bd70121 (2026-09-15).
Data as JSON: /api/errors/8cc7e8410edcfe8e.
Report an issue: GitHub.
Appendix: source
Thrown at lib/geocoder/logger.rb:27
class Logger
include Singleton
SEVERITY = {
debug: ::Logger::DEBUG,
info: ::Logger::INFO,
warn: ::Logger::WARN,
error: ::Logger::ERROR,
fatal: ::Logger::FATAL
}
def log(level, message)
unless valid_level?(level)
raise StandardError, "Geocoder tried to log a message with an invalid log level."
end
if current_logger.respond_to? :add
current_logger.add(SEVERITY[level], message)
else
raise Geocoder::ConfigurationError, "Please specify valid logger for Geocoder. " +
"Logger specified must be :kernel or must respond to `add(level, message)`."
end
nil
end
private # ----------------------------------------------------------------
def current_logger
logger = Geocoder.config[:logger]
if logger == :kernel
logger = Geocoder::KernelLogger.instance
end
logger
end
def valid_level?(level)
SEVERITY.keys.include?(level)
endView on GitHub (pinned to c10bd70121)