/
broadcast_backend.cr
48 lines (40 loc) · 1.14 KB
/
broadcast_backend.cr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# A backend that broadcast to others backends.
# Each of the referenced backends may have a different severity level filter.
#
# When this backend level is set that level setting takes precedence
# over the severity filter of each referenced backend.
#
# This backend is not to be used explicitly. It is used by `Log::Builder` configuration
# to allow a given source to emit to multiple backends.
class Log::BroadcastBackend < Log::Backend
property level : Severity? = nil
@backends = Hash(Log::Backend, Severity).new
def initialize
super(:direct)
end
def append(backend : Log::Backend, level : Severity) : Nil
@backends[backend] = level
end
def write(entry : Entry) : Nil
@backends.each do |backend, level|
backend.dispatch(entry) if (@level || level) <= entry.severity
end
end
def close : Nil
@backends.each_key &.close
end
# :nodoc:
def min_level : Severity
@backends.each_value.min? || Severity::None
end
# :nodoc:
def single_backend?
if @backends.size == 1
@backends.first
end
end
# :nodoc:
def remove(backend : Log::Backend) : Nil
@backends.delete(backend)
end
end