Class: Console::Output::Serialized

Inherits:
Object
  • Object
show all
Defined in:
lib/console/output/serialized.rb

Overview

Serialize log messages in a structured format.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream, format: Format.default, **options) ⇒ Serialized

Create a new serialized output.



19
20
21
22
# File 'lib/console/output/serialized.rb', line 19

def initialize(stream, format: Format.default, **options)
  @stream = stream
  @format = format
end

Instance Attribute Details

#formatObject (readonly)

Returns the value of attribute format.



33
34
35
# File 'lib/console/output/serialized.rb', line 33

def format
  @format
end

#streamObject (readonly)

Returns the value of attribute stream.



30
31
32
# File 'lib/console/output/serialized.rb', line 30

def stream
  @stream
end

#The format to use for serializing log messages.(formattouse) ⇒ Object (readonly)



33
# File 'lib/console/output/serialized.rb', line 33

attr :format

Instance Method Details

#call(subject = nil, *arguments, severity: UNKNOWN, **options, &block) ⇒ Object

Output the given log message.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/console/output/serialized.rb', line 50

def call(subject = nil, *arguments, severity: UNKNOWN, **options, &block)
  record = {
    time: Time.now.iso8601,
    severity: severity,
    process_id: Process.pid,
    fiber_id: Fiber.current.object_id,
  }
  
  # For backwards compatibility:
  record[:pid] = record[:process_id]
  
  # We want to log just a brief subject:
  if subject.is_a?(String)
    record[:subject] = subject
  elsif subject.is_a?(Module)
    record[:subject] = subject.name
  else
    record[:subject] = subject.class.name
    record[:object_id] = subject.object_id
  end
  
  if annotation = Fiber.current.annotation
    record[:annotation] = annotation
  end
  
  message = arguments
  
  if block_given?
    if block.arity.zero?
      message << yield
    else
      buffer = StringIO.new
      yield buffer
      message << buffer.string
    end
  end
  
  if message.size == 1
    record[:message] = message.first
  elsif message.any?
    record[:message] = message
  end
  
  record.update(options)
  
  @stream.write(self.dump(record) << "\n")
end

#dump(record) ⇒ Object

Serialize the given record.



39
40
41
# File 'lib/console/output/serialized.rb', line 39

def dump(record)
  @format.dump(record)
end

#last_outputObject

This a final output that then writes to an IO object.



25
26
27
# File 'lib/console/output/serialized.rb', line 25

def last_output
  self
end

#The output stream.=(outputstream. = (value)) ⇒ Object



30
# File 'lib/console/output/serialized.rb', line 30

attr :stream