Aws Lambdas - undefined method `[]' for nil:NilClass
Getting some errors with the logger gem when executing
logger = Logger.new($stdout)
logger.info 'test'
"errorMessage": "undefined method `[]' for nil:NilClass",
"errorType": "Function<NoMethodError>",
"stackTrace": [
"/var/task/vendor/bundle/ruby/3.2.0/gems/logger-1.6.0/lib/logger.rb:384:in `level'",
"/var/task/vendor/bundle/ruby/3.2.0/gems/logger-1.6.0/lib/logger.rb:653:in `add'",
"/var/task/vendor/bundle/ruby/3.2.0/gems/logger-1.6.0/lib/logger.rb:697:in `info'",
error does not appear when using version 1.5.3 of the gem
https://github.com/ruby/logger/compare/v1.5.3...v1.6.0
For some reason it looks like the initialize function is not being triggered and thus @level_override is never set to {}
Wow so here is the culprit AWS lambda ecosystem is actually monkey patching the logger class and because my code is using $stdout it goes though their patch. that does NOT setup
def initialize(logdev, shift_age = 0, shift_size = 1048576, level: Logger::DEBUG,
progname: nil, formatter: nil, datetime_format: nil,
binmode: false, shift_period_suffix: '%Y%m%d')
# use unpatched constructor if logdev is a filename or an IO Object other than $stdout or $stderr
if logdev && logdev != $stdout && logdev != $stderr
super(logdev, shift_age, shift_size, level: level, progname: progname,
formatter: formatter, datetime_format: datetime_format,
binmode: binmode, shift_period_suffix: shift_period_suffix)
else
self.level = level
self.progname = progname
@default_formatter = LambdaLogFormatter.new
self.datetime_format = datetime_format
self.formatter = formatter
@logdev = TELEMETRY_LOG_SINK
end
end
end
I am not sure where this code is defined or what Github project to use to open an issue
somebody beat me to it https://github.com/aws/aws-lambda-ruby-runtime-interface-client/issues/33
This report has been resolved by https://github.com/ruby/logger/releases/tag/v1.6.1