Module: Appydays::Loggable

Included in:
RequestLogger, SidekiqJobLogger
Defined in:
lib/appydays/loggable.rb

Overview

Helpers for working with structured logging. Use this instead of calling semantic_logger directly. Generally you ‘include Appydays::Loggable`

Defined Under Namespace

Modules: Methods

Class Method Summary collapse

Class Method Details

.[](key) ⇒ Object

Return the logger for a key/object.



127
128
129
130
131
# File 'lib/appydays/loggable.rb', line 127

def self.[](key)
  return key.logger if key.respond_to?(:logger)
  (key = key.class) unless [Module, Class].include?(key.class)
  return SemanticLogger[key]
end

.configure_12factor(format: nil, application: nil) ⇒ Object

Configure logging for 12 factor applications. Specifically, that means setting STDOUT to synchronous, using STDOUT as the log output, and also conveniently using color formatting if using a tty or json otherwise (ie, you want to use json logging on a server).



139
140
141
142
143
144
# File 'lib/appydays/loggable.rb', line 139

def self.configure_12factor(format: nil, application: nil)
  format ||= $stdout.isatty ? :color : :json
  $stdout.sync = true
  SemanticLogger.application = application if application
  SemanticLogger.add_appender(io: $stdout, formatter: format.to_sym)
end

.default_level=(v) ⇒ Object



115
116
117
# File 'lib/appydays/loggable.rb', line 115

def self.default_level=(v)
  self.set_default_level(v)
end

.ensure_stderr_appenderObject



161
162
163
164
165
# File 'lib/appydays/loggable.rb', line 161

def self.ensure_stderr_appender
  return if @stderr_appended
  SemanticLogger.add_appender(io: $stderr)
  @stderr_appended = true
end

.included(target) ⇒ Object



108
109
110
111
112
113
# File 'lib/appydays/loggable.rb', line 108

def self.included(target)
  target.include(SemanticLogger::Loggable)

  target.extend(Methods)
  target.include(Methods)
end

.set_default_level(v, warning: true) ⇒ Object



119
120
121
122
123
# File 'lib/appydays/loggable.rb', line 119

def self.set_default_level(v, warning: true)
  return if v == SemanticLogger.default_level
  self[self].warn "Overriding log level to %p" % v if warning
  SemanticLogger.default_level = v
end

.with_log_tags(tags) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/appydays/loggable.rb', line 146

def self.with_log_tags(tags)
  if defined?(Sentry)
    Sentry.configure_scope do |scope|
      scope.set_extras(tags)
    end
  end
  blockresult = nil
  SemanticLogger.named_tagged(tags) do
    blockresult = yield
  end
  return blockresult
end