| 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
|
|
|
|
|
|
|
}} |