Class: Log

Inherits:
Object
  • Object
show all
Extended by:
Registry, SubjectName, Telemetry::Register
Includes:
Dependency, Initializer, Filter, Level, Levels, Tags, Write
Defined in:
lib/log.rb,
lib/log/log.rb,
lib/log/tags.rb,
lib/log/level.rb,
lib/log/write.rb,
lib/log/filter.rb,
lib/log/format.rb,
lib/log/levels.rb,
lib/log/defaults.rb,
lib/log/registry.rb,
lib/log/telemetry.rb,
lib/log/substitute.rb,
lib/log/controls/log.rb,
lib/log/format/color.rb,
lib/log/subject_name.rb,
lib/log/controls/time.rb,
lib/log/controls/subject.rb

Defined Under Namespace

Modules: Controls, Defaults, Filter, Format, Level, Levels, Registry, SubjectName, Substitute, Tags, Telemetry, Write Classes: Error

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Registry

get, register, registry

Methods included from SubjectName

subject_name

Methods included from Telemetry::Register

register_telemetry_sink

Methods included from Write

#write

Methods included from Filter

#log_all_tags?, #log_untagged?, #precedent?, #tags_intersect?, #write_level?, #write_tag?

Methods included from Tags

#excluded_tags, #included_tags, #tag=, #tag?, #tags, #tags=, #tags?

Methods included from Level

#add_level, #assure_level, #level, #level=, #level?, #logger_ordinal, #max_level, #max_level!, #min_level, #min_level!, #no_level!, #no_ordinal, #ordinal, #remove_level

Methods included from Levels

included, #level_names, #levels, #levels?

Instance Attribute Details

#deviceObject



42
43
44
# File 'lib/log/log.rb', line 42

def device
  @device ||= Defaults.device
end

Class Method Details

.bare(subject) ⇒ Object



64
65
66
# File 'lib/log/log.rb', line 64

def self.bare(subject)
  no_defaults(subject)
end

.build(subject) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/log/log.rb', line 50

def self.build(subject)
  subject = subject_name(subject)
  instance = new(subject)
  Clock::UTC.configure(instance)
  set_defaults(instance)
  instance
end

.configure(receiver, attr_name: nil) ⇒ Object



68
69
70
71
72
73
# File 'lib/log/log.rb', line 68

def self.configure(receiver, attr_name: nil)
  attr_name ||= :logger
  instance = get(receiver)
  receiver.public_send("#{attr_name}=", instance)
  instance
end

.inherited(cls) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/log/log.rb', line 16

def self.inherited(cls)
  cls.class_exec do
    dependency_module = Module.new do
      define_singleton_method :included do |reciever_class|
        reciever_class.class_exec do
          ::Dependency::Attribute.define(self, :logger, cls)

          define_method :logger do
            @logger ||= cls.configure self
          end
        end
      end
    end

    const_set :Dependency, dependency_module
  end
end

.no_defaults(subject) ⇒ Object



58
59
60
61
62
# File 'lib/log/log.rb', line 58

def self.no_defaults(subject)
  instance = new(subject)
  Clock::UTC.configure(instance)
  instance
end

.set_defaults(logger) ⇒ Object



109
110
111
112
113
# File 'lib/log/log.rb', line 109

def self.set_defaults(logger)
  logger.class.add_levels(logger)
  logger.level = Defaults.level
  logger.tags = Defaults.tags
end

Instance Method Details

#call(message = nil, level = nil, tag: nil, tags: nil, &blk) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/log/log.rb', line 75

def call(message=nil, level=nil, tag: nil, tags: nil, &blk)
  tag = Array(tag)
  tags = Array(tags)
  tags = tags + tag

  assure_level(level)

  tag!(tags)

  if write?(level, tags)
    if block_given?
      message = blk.call
    end
    raise ArgumentError, "Log message not provided" if message.nil?

    write(message, level, tags)
  end
end

#clearObject



102
103
104
105
106
107
# File 'lib/log/log.rb', line 102

def clear
  level_names.each do |level_name|
    remove_level(level_name)
  end
  self.level = nil
end

#tag!(tags) ⇒ Object



94
95
96
# File 'lib/log/log.rb', line 94

def tag!(tags)
  tags
end

#telemetryObject



46
47
48
# File 'lib/log/log.rb', line 46

def telemetry
  @telemetry ||= ::Telemetry.build
end

#write?(message_level, message_tags) ⇒ Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/log/log.rb', line 98

def write?(message_level, message_tags)
  write_level?(message_level) && write_tag?(message_tags)
end