Stride Reference Manual  - generated for commit 9643b11
LogUtils.cpp
Go to the documentation of this file.
1 /*
2  * This is free software: you can redistribute it and/or modify it
3  * under the terms of the GNU General Public License as published by
4  * the Free Software Foundation, either version 3 of the License, or
5  * any later version.
6  * The software is distributed in the hope that it will be useful,
7  * but WITHOUT ANY WARRANTY; without even the implied warranty of
8  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9  * GNU General Public License for more details.
10  * You should have received a copy of the GNU General Public License
11  * along with the software. If not, see <http://www.gnu.org/licenses/>.
12  *
13  * Copyright 2017, Kuylen E, Willem L, Broeckhove J
14  */
20 #include "LogUtils.h"
21 
22 #include <iostream>
23 #include <spdlog/sinks/null_sink.h>
24 
25 using namespace spdlog;
26 using namespace spdlog::sinks;
27 using namespace std;
28 
29 namespace stride {
30 namespace util {
31 
32 std::shared_ptr<spdlog::logger> LogUtils::CreateCliLogger(const string& logger_name, const string& file_name)
33 {
34  set_async_mode(1048576);
35  auto lggr = get(logger_name);
36  if (lggr) {
37  throw runtime_error("LogUtils::CreateCliLogger> Creating already registered logger" + logger_name);
38  }
39  try {
40  vector<sink_ptr> sinks;
41  const auto color_sink = make_shared<ansicolor_stdout_sink_st>();
42  sinks.push_back(color_sink);
43  sinks.push_back(make_shared<simple_file_sink_st>(file_name));
44  lggr = make_shared<logger>(logger_name, begin(sinks), end(sinks));
45  } catch (const spdlog_ex& e) {
46  cerr << "LogUtils::CreateCliLogger> Logger initialization failed for " << logger_name
47  << " and file: " << file_name << endl;
48  throw;
49  }
50  return lggr;
51 }
52 
53 std::shared_ptr<spdlog::logger> LogUtils::CreateFileLogger(const string& logger_name, const string& file_name)
54 {
55  set_async_mode(1048576);
56  auto lggr = get(logger_name);
57  if (lggr) {
58  throw runtime_error("LogUtils::CreateFileLogger> Creating already registered logger" + logger_name);
59  }
60  try {
61  const auto sink = make_shared<simple_file_sink_st>(file_name, true);
62  lggr = make_shared<logger>(logger_name, sink);
63  } catch (const spdlog_ex& e) {
64  cerr << "LogUtils::CreateFileLogger> Logger initialization failed for " << logger_name
65  << " and file: " << file_name << endl;
66  throw;
67  }
68  return lggr;
69 }
70 
71 std::shared_ptr<logger> LogUtils::CreateNullLogger(const string& logger_name)
72 {
73  set_async_mode(1048576);
74  auto lggr = get(logger_name);
75  if (lggr) {
76  throw runtime_error("LogUtils::CreateNullLogger> Creating already registered logger" + logger_name);
77  }
78  try {
79  const auto null_sink = make_shared<null_sink_st>();
80  lggr = make_shared<logger>(logger_name, null_sink);
81  } catch (const spdlog_ex& e) {
82  cerr << "LogUtils::CreateNullLogger> Logger initialization failed for " << logger_name << endl;
83  throw;
84  }
85  return lggr;
86 }
87 
88 std::shared_ptr<logger> LogUtils::CreateRotatingLogger(const string& logger_name, const string& file_name)
89 {
90  set_async_mode(1048576);
91  auto lggr = get(logger_name);
92  if (lggr) {
93  throw runtime_error("LogUtils::CreateRotatingLogger> Creating already registered logger" + logger_name);
94  }
95  try {
96  auto rot = make_shared<rotating_file_sink_mt>(file_name, numeric_limits<size_t>::max(),
97  numeric_limits<size_t>::max());
98  lggr = make_shared<logger>(logger_name, rot);
99  } catch (const spdlog_ex& e) {
100  cerr << "LogUtils::CreateRotatingLogger> Logger initialization failed for " << logger_name
101  << " and file: " << file_name << endl;
102  throw;
103  }
104  return lggr;
105 }
106 
107 } // namespace util
108 } // namespace stride
STL namespace.
Logging (spdlog) utilities.
Namespace for the simulator and related classes.
Definition: Calendar.cpp:28