Module: Dakwak::Logger

Includes:
Silencable
Included in:
Channel, Configurator, MongoAdapter, PrivateChannel, Station
Defined in:
lib/dakwak/logger.rb

Overview

A thread-safe logging interface.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Silencable

#silence, #silent?

Class Method Details

.included(base) ⇒ Object

:nodoc:



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/dakwak/logger.rb', line 76

def self.included(base) # :nodoc:
  if defined?(Rails) then
    @@levels ||= { }
    LogLevel.constants.each { |c| @@levels[LogLevel.const_get(c)] = c.to_s.downcase }
    send :define_method, :"log" do |msg, level, _|
      Rails.logger.send(@@levels[level], msg)
    end
  end

  LogLevel.constants.each { |level|
    method = :"log_#{level.to_s.downcase}"
    return if method_defined? method

    send :define_method, :"log_#{level.to_s.downcase}" do |*args|
      msg = args[0]
      opts = args[1] || {}
      log(msg, LogLevel.const_get(level), opts)
    end
  }
end

Instance Method Details

#initializeObject



116
117
118
119
120
121
# File 'lib/dakwak/logger.rb', line 116

def initialize
  @__log_ctx    ||= "unnamed"
  @__log_indent ||= 0
  @__log_prefix ||= ""
  super()
end

#log(msg, level, opts = {}) ⇒ Object

Logs a message.

Parameters:

  • msg

    The message to log

  • level

    The logging level (see LogLevel)

  • opts (defaults to: {})

    Logging options (see LogManager::log)



70
71
72
73
74
# File 'lib/dakwak/logger.rb', line 70

def log(msg, level, opts = {})
  
  print("#{@__log_prefix}#{"\t" * (@__log_indent || 0)}#{msg}")
  Dakwak.log_manager.log("#{@__log_prefix}#{"\t" * (@__log_indent || 0)}#{msg}", level, opts) unless silent?
end

#log_indent(&block) ⇒ Object

Messages logged within the given block will be indented by 1 step



110
111
112
113
114
# File 'lib/dakwak/logger.rb', line 110

def log_indent(&block) # :yield:
  log_indent_inc
  if block_given? then yield end
  log_indent_dec
end

#log_indent_decObject

Resets 1 step of whitespace indentation from all messages logged in the future.



104
105
106
107
# File 'lib/dakwak/logger.rb', line 104

def log_indent_dec
  @__log_indent ||= 0
  @__log_indent -= 1
end

#log_indent_incObject

Indents all messages logged in the future with whitespace by 1 step.



98
99
100
101
# File 'lib/dakwak/logger.rb', line 98

def log_indent_inc
  @__log_indent ||= 0
  @__log_indent += 1
end

#logging_context(context) ⇒ Object

Assigns the logging context (NDC) of this logger instance.



48
49
50
# File 'lib/dakwak/logger.rb', line 48

def logging_context
  @__log_ctx
end