Class: AwsLambdaRIC::TelemetryLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/aws_lambda_ric.rb

Overview

Helper class to for mutating std logger with TelemetryLog

Constant Summary collapse

ENV_VAR_TELEMETRY_LOG_FD =
'_LAMBDA_TELEMETRY_LOG_FD'

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(telemetry_log_fd) ⇒ TelemetryLogger

Returns a new instance of TelemetryLogger.



150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/aws_lambda_ric.rb', line 150

def initialize(telemetry_log_fd)
  fd = telemetry_log_fd.to_i
  AwsLambdaRIC::TelemetryLogger.telemetry_log_fd_file = IO.new(fd, 'wb')
  AwsLambdaRIC::TelemetryLogger.telemetry_log_fd_file.sync = true

  AwsLambdaRIC::TelemetryLogger.telemetry_log_sink = TelemetryLogSink.new(file: AwsLambdaRIC::TelemetryLogger.telemetry_log_fd_file)

  mutate_kernel_puts

rescue Errno::ENOENT, Errno::EBADF
  AwsLambdaRIC::TelemetryLogger.telemetry_log_fd_file = nil
  AwsLambdaRIC::TelemetryLogger.telemetry_log_sink = nil
end

Class Attribute Details

.logger_patch_appliedObject

Returns the value of attribute logger_patch_applied.



134
135
136
# File 'lib/aws_lambda_ric.rb', line 134

def logger_patch_applied
  @logger_patch_applied
end

.telemetry_log_fd_fileObject

Returns the value of attribute telemetry_log_fd_file.



134
135
136
# File 'lib/aws_lambda_ric.rb', line 134

def telemetry_log_fd_file
  @telemetry_log_fd_file
end

.telemetry_log_sinkObject

Returns the value of attribute telemetry_log_sink.



134
135
136
# File 'lib/aws_lambda_ric.rb', line 134

def telemetry_log_sink
  @telemetry_log_sink
end

Class Method Details

.closeObject



135
136
137
138
# File 'lib/aws_lambda_ric.rb', line 135

def close
  telemetry_log_fd_file&.close
  self.telemetry_log_fd_file = nil
end

.from_envObject



164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/aws_lambda_ric.rb', line 164

def self.from_env()

  LoggerPatch.refresh_runtime_config!
  mutate_std_logger
  AwsLambdaRIC::TelemetryLogger.telemetry_log_sink = nil

  return unless ENV.key?(ENV_VAR_TELEMETRY_LOG_FD)

  fd = ENV.fetch(AwsLambdaRIC::TelemetryLogger::ENV_VAR_TELEMETRY_LOG_FD)
  ENV.delete(AwsLambdaRIC::TelemetryLogger::ENV_VAR_TELEMETRY_LOG_FD)
  AwsLambdaRIC::TelemetryLogger.new(fd)
end

.mutate_std_loggerObject



140
141
142
143
144
145
146
147
# File 'lib/aws_lambda_ric.rb', line 140

def mutate_std_logger
  return if logger_patch_applied

  Logger.class_eval do
    prepend LoggerPatch
  end
  self.logger_patch_applied = true
end