forked from p4lang/behavioral-model
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.cpp
107 lines (92 loc) · 2.88 KB
/
logger.cpp
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
49
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
97
98
99
100
101
102
103
104
105
106
107
/* Copyright 2013-present Barefoot Networks, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Antonin Bas ([email protected])
*
*/
#include <bm/bm_sim/logger.h>
#include <bm/spdlog/sinks/null_sink.h>
#include <iosfwd>
#include <memory>
#include <string>
namespace bm {
spdlog::logger *Logger::logger = nullptr;
void
Logger::set_logger_console() {
unset_logger();
auto logger_ = spdlog::stdout_logger_mt("bmv2");
logger = logger_.get();
set_pattern();
logger_->set_level(to_spd_level(LogLevel::DEBUG));
}
void
Logger::set_logger_file(const std::string &filename, bool force_flush) {
unset_logger();
auto logger_ = spdlog::rotating_logger_mt("bmv2", filename,
1024 * 1024 * 5, 3, force_flush);
logger = logger_.get();
set_pattern();
logger_->set_level(to_spd_level(LogLevel::DEBUG));
}
void
Logger::set_logger_ostream(std::ostream &os) {
unset_logger();
auto sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(os);
auto logger_ = std::make_shared<spdlog::logger>("bmv2", sink);
spdlog::register_logger(logger_);
logger = logger_.get();
set_pattern();
logger_->set_level(to_spd_level(LogLevel::DEBUG));
}
void
Logger::set_pattern() {
logger->set_pattern("[%H:%M:%S.%e] [%n] [%L] [thread %t] %v");
}
void
Logger::unset_logger() {
spdlog::drop("bmv2");
}
spdlog::logger *
Logger::init_logger() {
if (logger != nullptr) return logger;
auto null_sink = std::make_shared<spdlog::sinks::null_sink_mt>();
auto null_logger = std::make_shared<spdlog::logger>("bmv2", null_sink);
spdlog::register_logger(null_logger);
logger = null_logger.get();
return logger;
}
void
Logger::set_log_level(LogLevel level) {
spdlog::logger *logger = get();
logger->set_level(to_spd_level(level));
}
spdlog::level::level_enum
Logger::to_spd_level(LogLevel level) {
namespace spdL = spdlog::level;
switch (level) {
case LogLevel::TRACE: return spdL::trace;
case LogLevel::DEBUG: return spdL::debug;
case LogLevel::INFO: return spdL::info;
case LogLevel::NOTICE: return spdL::notice;
case LogLevel::WARN: return spdL::warn;
case LogLevel::ERROR: return spdL::err;
case LogLevel::CRITICAL: return spdL::critical;
case LogLevel::ALERT: return spdL::alert;
case LogLevel::EMERG: return spdL::emerg;
case LogLevel::OFF: return spdL::off;
default: return spdL::off;
}
}
} // namespace bm