This repository was archived by the owner on Oct 6, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathlogger.cpp
More file actions
107 lines (90 loc) · 4.37 KB
/
logger.cpp
File metadata and controls
107 lines (90 loc) · 4.37 KB
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 (c) 2009-2023 ectotropic (ectotropic@gmail.com, *
* https://github.com/ectotropic) *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation, either version 2.1 of the License, or (at *
* your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
* for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
* *
*******************************************************************************
******************************************************************************/
//--------------------------------------
//
#include "CommonHeaders.h"
#include "logger.h"
//--------------------------------------
//--------------------------------------
//
#include <spdlog/sinks/msvc_sink.h>
//--------------------------------------
//--------------------------------------
//
#include <array>
#include <memory>
#include <utility>
//--------------------------------------
namespace {
//**************************************************************************
// Internal Helpers
//**************************************************************************
template <std::size_t CountT>
using sink_array = std::array<::logger::sink_ptr_t, CountT>;
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
template <class... ArgsT>
decltype(auto) make_logger(::logger::string_t name, ArgsT&&... Args) {
return std::make_shared<::logger::logger_t>(name, std::forward<ArgsT>(Args)...);
}
//----------------------------------
template <class... ArgsT>
decltype(auto) make_logger_debug(::logger::string_t name, ArgsT&&... Args) {
sink_array<2> sinks{
std::make_shared<spdlog::sinks::msvc_sink_mt>(),
std::forward<ArgsT>(Args)...
};
return make_logger(name, std::begin(sinks), std::end(sinks));
}
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
::logger::logger_ptr_t g_MainLogger{};
} // namespace <anonymous>
//==============================================================================
namespace logger {
//**************************************************************************
// SPDLOG Helpers
//**************************************************************************
void initialise(::logger::string_t name,
::logger::level_t level,
::logger::sink_ptr_t sink,
::logger::string_t pattern) {
#if (!defined(DEBUG) && !defined(_DEBUG)) || defined(NDEBUG)
if (::IsDebuggerPresent()) {
#endif
g_MainLogger = make_logger_debug(name, sink);
#if (!defined(DEBUG) && !defined(_DEBUG)) || defined(NDEBUG)
} else {
g_MainLogger = make_logger(name, sink);
}
#endif
if (g_MainLogger) { ::spdlog::register_logger(g_MainLogger); }
if (g_MainLogger) { ::spdlog::set_default_logger(g_MainLogger); }
::spdlog::set_level(level);
if (!pattern.empty()) {
spdlog::set_pattern(pattern);
}
}
//----------------------------------
void uninitialise() noexcept {
g_MainLogger.reset();
}
} // namespace logger