Skip to content

Commit 55a096a

Browse files
authored
Logger fix (#8)
Extract the logger_patch and apply with prepend
1 parent e4939c2 commit 55a096a

File tree

5 files changed

+66
-18
lines changed

5 files changed

+66
-18
lines changed

Gemfile.lock

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,32 @@
11
PATH
22
remote: .
33
specs:
4-
aws_lambda_ric (1.0.0)
4+
aws_lambda_ric (1.0.1)
55

66
GEM
77
remote: https://rubygems.org/
88
specs:
9+
activesupport (6.0.3.4)
10+
concurrent-ruby (~> 1.0, >= 1.0.2)
11+
i18n (>= 0.7, < 2)
12+
minitest (~> 5.1)
13+
tzinfo (~> 1.1)
14+
zeitwerk (~> 2.2, >= 2.2.2)
15+
concurrent-ruby (1.1.7)
16+
i18n (1.8.5)
17+
concurrent-ruby (~> 1.0)
918
minitest (5.14.2)
1019
rake (13.0.1)
20+
thread_safe (0.3.6)
21+
tzinfo (1.2.8)
22+
thread_safe (~> 0.1)
23+
zeitwerk (2.4.2)
1124

1225
PLATFORMS
1326
ruby
1427

1528
DEPENDENCIES
29+
activesupport (~> 6.0.1)
1630
aws_lambda_ric!
1731
bundler (>= 2.0)
1832
minitest (~> 5.0)

lib/aws_lambda_ric.rb

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
require_relative 'aws_lambda_ric/lambda_context'
99
require_relative 'aws_lambda_ric/lambda_logger'
1010
require_relative 'aws_lambda_ric/lambda_log_formatter'
11+
require_relative 'aws_lambda_ric/logger_patch'
1112
require_relative 'aws_lambda_ric/telemetry_log_sink'
1213
require_relative 'aws_lambda_ric/aws_lambda_marshaller'
1314
require_relative 'aws_lambda_ric/xray_cause'
@@ -149,23 +150,7 @@ def initialize(telemetry_log_fd, path_to_fd='/proc/self/fd/')
149150

150151
def mutate_std_logger
151152
Logger.class_eval do
152-
alias_method :orig_initialize, :initialize
153-
def initialize(logdev, shift_age = 0, shift_size = 1048576, level: 'debug',
154-
progname: nil, formatter: nil, datetime_format: nil,
155-
binmode: false, shift_period_suffix: '%Y%m%d')
156-
# use unpatched constructor if logdev is a filename or an IO Object other than $stdout or $stderr
157-
if logdev && logdev != $stdout && logdev != $stderr
158-
orig_initialize(logdev, shift_age, shift_size, level, progname,
159-
formatter, datetime_format, binmode, shift_period_suffix)
160-
else
161-
self.level = level
162-
self.progname = progname
163-
@default_formatter = LambdaLogFormatter.new
164-
self.datetime_format = datetime_format
165-
self.formatter = formatter
166-
@logdev = AwsLambdaRuntimeInterfaceClient::TelemetryLoggingHelper.telemetry_log_sink
167-
end
168-
end
153+
prepend LoggerPatch
169154
end
170155
end
171156

lib/aws_lambda_ric/logger_patch.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
3+
module LoggerPatch
4+
def initialize(logdev, shift_age = 0, shift_size = 1048576, level: 'debug',
5+
progname: nil, formatter: nil, datetime_format: nil,
6+
binmode: false, shift_period_suffix: '%Y%m%d')
7+
# use unpatched constructor if logdev is a filename or an IO Object other than $stdout or $stderr
8+
if logdev && logdev != $stdout && logdev != $stderr
9+
super(logdev, shift_age, shift_size, level: level, progname: progname,
10+
formatter: formatter, datetime_format: datetime_format,
11+
binmode: binmode, shift_period_suffix: shift_period_suffix)
12+
else
13+
self.level = level
14+
self.progname = progname
15+
@default_formatter = LambdaLogFormatter.new
16+
self.datetime_format = datetime_format
17+
self.formatter = formatter
18+
@logdev = AwsLambdaRuntimeInterfaceClient::TelemetryLoggingHelper.telemetry_log_sink
19+
end
20+
end
21+
end

test/unit/harness-suite.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,23 @@
205205
"response": true
206206
}
207207
},
208+
{
209+
"name": "test_logger_logs_to_a_file_when_logdev_is_a_file",
210+
"handler": "log.log_to_file_and_read_back",
211+
"environmentVariables": {
212+
"_LAMBDA_TELEMETRY_LOG_FD": "test/unit/resources/fd/test_fd"
213+
},
214+
"request": {
215+
"messages": ["Single frame written to a file\n even if there are multiple lines\nthird line"],
216+
"fd_path": "test/unit/resources/fd/test_fd",
217+
"file_path": "test/unit/resources/fd/test_file.txt"
218+
},
219+
"assertion":
220+
{
221+
"transform": "I, \\[[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(2[0-3]|[01][0-9]):[0-5][0-9]:[0-9]{2}.[0-9]{6} #[0-9]*\\] INFO -- : Single frame written to a file\\\\n even if there are multiple lines\\\\nthird line",
222+
"response": true
223+
}
224+
},
208225
{
209226
"name": "test_logger_uses_telemetry_log_fd_when_logdev_is_stderr",
210227
"handler": "log.log_to_stderr_and_read_fd",

test/unit/resources/runtime_handlers/log.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ def log_to_stderr_and_read_fd(event:, context:)
3030
read_fd('', event)
3131
end
3232

33+
def log_to_file_and_read_back(event:, context:)
34+
logger = Logger.new(event['file_path'])
35+
event['messages'].each { |m| logger.info(m) }
36+
read_file('', event)
37+
end
38+
39+
def read_file(content, event)
40+
File.foreach(event['file_path']) { |line| content << line }
41+
content
42+
end
43+
3344
def read_fd(content, event)
3445
File.open(event['fd_path'], 'rb') do |file|
3546
until file.eof?

0 commit comments

Comments
 (0)