line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#pragma once |
2
|
|
|
|
|
|
|
#include "log.h" |
3
|
|
|
|
|
|
|
#include |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
namespace panda { namespace log { |
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
struct MultiLogger : ILogger { |
8
|
32
|
|
|
|
|
|
struct Channel { |
9
|
|
|
|
|
|
|
Channel (ILoggerFromAny l, Level minl) : logger(std::move(l.value)), min_level(minl) {} |
10
|
8
|
|
|
|
|
|
Channel (ILoggerFromAny l, IFormatterFromAny f = {}, Level minl = Level::Debug) |
11
|
8
|
|
|
|
|
|
: logger(std::move(l.value)), formatter(std::move(f.value)), min_level(minl) {} |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
ILoggerSP logger; |
14
|
|
|
|
|
|
|
IFormatterSP formatter; |
15
|
|
|
|
|
|
|
Level min_level; |
16
|
|
|
|
|
|
|
}; |
17
|
|
|
|
|
|
|
using Channels = std::vector; |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
MultiLogger (const Channels&); |
20
|
|
|
|
|
|
|
~MultiLogger (); |
21
|
|
|
|
|
|
|
|
22
|
|
|
|
|
|
|
void log_format (std::string&, const Info&, const IFormatter&) override; |
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
private: |
25
|
|
|
|
|
|
|
const Channels channels; // could not be changed for thread-safety |
26
|
|
|
|
|
|
|
}; |
27
|
|
|
|
|
|
|
using MultiLoggerSP = iptr; |
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
}} |