class RestashRails::Logger
Constants
- DEFAULT_TIMEOUT
Attributes
app_name[RW]
formatter[RW]
level[RW]
logstash_host[RW]
logstash_port[RW]
output_type[RW]
outputter[RW]
timeout_options[RW]
Public Class Methods
new(configs)
click to toggle source
# File lib/restash_rails/logger.rb, line 9 def initialize(configs) self.level = configs[:level] || 'DEBUG' @logstash_host = configs[:host] || '127.0.0.1' #logstash host @logstash_port = configs[:port].to_i || 5960 #logstash port @app_name = configs[:app_name] || ENV['APP_NAME'] || Rails.application.class.name @output_type = (configs[:output_type] || 'tcp').to_s.downcase #TCP connection timeouts in milliseconds if configs[:timeout_options].present? configs[:timeout_options].each{ |k,v| configs[:timeout_options][k] = v.to_f } @timeout_options = configs[:timeout_options] else @timeout_options = { connect_timeout: DEFAULT_TIMEOUT, write_timeout: DEFAULT_TIMEOUT, read_timeout: DEFAULT_TIMEOUT } end set_formatter(configs) @stdout_logger = ::Logger.new(STDOUT) @stdout_logger.formatter = proc do |severity, datetime, progname, msg| "#{msg}\n" end end
Public Instance Methods
level=(level)
click to toggle source
# File lib/restash_rails/logger.rb, line 42 def level=(level) return @level if @level.present? if level.is_a?(Integer) ::Logger::Severity.constants.each { |severity| return @level = severity if level == severity } raise "Log level #{level} not recognised" else desired_level = level.to_s.upcase raise "Log level #{level} not recognised" unless self.class.constants.include?(desired_level.to_sym) return @level = class_eval(desired_level) end end
Private Instance Methods
environment()
click to toggle source
# File lib/restash_rails/logger.rb, line 104 def environment (defined?(ENV['RAILS_ENV']) && ENV['RAILS_ENV']) || (defined?(Rails.env) && Rails.env) || (defined?(ENV['RACK_ENV']) && ENV['RACK_ENV']) || :unknown end
log(severity, message = nil)
click to toggle source
# File lib/restash_rails/logger.rb, line 63 def log(severity, message = nil) severity_value = class_eval(severity.to_s.upcase) return unless log_severity_allowed?(severity_value) log_message = {} log_message[:severity] = severity log_message[:app_name] = app_name log_message[:rails_env] = environment log_message[:output_type] ||= @output_type log_message.merge!(formatter.format_message(message)) log_message = log_message.with_indifferent_access log_message[:log_tag] ||= :custom write(log_message) end
log_severity_allowed?(severity)
click to toggle source
# File lib/restash_rails/logger.rb, line 77 def log_severity_allowed?(severity) return false unless severity.is_a?(Integer) severity >= level end
set_formatter(configs)
click to toggle source
# File lib/restash_rails/logger.rb, line 58 def set_formatter(configs) formatter_name = configs[:formatter] || Formatter::Default @formatter = formatter_name.new end
write(data)
click to toggle source
# File lib/restash_rails/logger.rb, line 82 def write(data) json_data = data.to_json case data[:output_type] when 'tcp' write_to_tcp(json_data) when 'stdout' write_to_stdout(json_data, data[:severity].downcase) end rescue => e @stdout_logger.error({ status: "Failed to write data to #{logstash_host}:#{logstash_port}", exception: e, data: data }) end
write_to_stdout(json_data, severity)
click to toggle source
# File lib/restash_rails/logger.rb, line 94 def write_to_stdout(json_data, severity) @stdout_logger.send(severity, json_data) end
write_to_tcp(json_data)
click to toggle source
# File lib/restash_rails/logger.rb, line 98 def write_to_tcp(json_data) sock = ::TCPTimeout::TCPSocket.new(logstash_host, logstash_port, timeout_options) sock.write(json_data) sock.close end