annotate common/logger.cpp @ 419:6ae7f069ba51 release-2.0

Close release-2.0 branch
author David Demelier <markand@malikania.fr>
date Wed, 01 Feb 2017 11:54:10 +0100
parents 03068f5ed79d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * logger.cpp -- irccd logging
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <cerrno>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <cstring>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <fstream>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <iostream>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <stdexcept>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <streambuf>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <irccd-config.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #if defined(HAVE_SYSLOG)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 # include <syslog.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #endif // !HAVE_SYSLOG
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include "logger.h"
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #include "system.h"
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 namespace irccd {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 namespace log {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 /* --------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 * Buffer -- output buffer (private)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 * -------------------------------------------------------- */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 * @class LoggerBuffer
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 * @brief This class is a internal buffer for the Logger streams
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 class Buffer : public std::stringbuf {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 private:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 Interface *m_interface{nullptr};
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 Level m_level;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 public:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * Create the buffer with the specified level.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 * @param level the level
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 inline Buffer(Level level) noexcept
23
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
59 : m_level(level)
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 * Update the underlying interface.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 * @param iface is a non-owning pointer to the new interface
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 inline void setInterface(Interface *iface) noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 m_interface = iface;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 * Sync the buffer by calling the interface if set.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 * This function split the buffer line per line and remove it before
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * calling the appropriate interface function.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 virtual int sync() override
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 #if defined(NDEBUG)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 /*
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 * Debug is disabled, don't call interface->write() but don't
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * forget to flush the buffer.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 if (m_level == Level::Debug) {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 str("");
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 return 0;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 #endif
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 /* Verbose is disabled? Don't show and flush the buffer too. */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 if (m_level == Level::Info && !isVerbose()) {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 str("");
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 return 0;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 std::string buffer = str();
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 std::string::size_type pos;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
102
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 while ((pos = buffer.find("\n")) != std::string::npos) {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 std::string line = buffer.substr(0, pos);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 /* Remove this line */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 buffer.erase(buffer.begin(), buffer.begin() + pos + 1);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
108
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 if (m_interface)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 m_interface->write(m_level, line);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
112
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 str(buffer);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
114
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 return 0;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 };
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
118
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 /* --------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 * Local variables
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 * -------------------------------------------------------- */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 namespace {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 /* Generic interface for all outputs */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 std::unique_ptr<Interface> iface;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 /* Internal buffers */
23
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
129 Buffer bufferInfo(Level::Info);
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
130 Buffer bufferWarning(Level::Warning);
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
131 Buffer bufferDebug(Level::Debug);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 /* Stream outputs */
23
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
134 std::ostream streamInfo(&bufferInfo);
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
135 std::ostream streamWarning(&bufferWarning);
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
136 std::ostream streamDebug(&bufferDebug);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 /* Options */
23
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
139 bool verbose(false);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 } // !namespace
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
142
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 /* --------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 * Console
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 * -------------------------------------------------------- */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 void Console::write(Level level, const std::string &line) noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 if (level == Level::Warning)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 std::cerr << line << std::endl;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 else
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 std::cout << line << std::endl;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 /* --------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 * File
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 * -------------------------------------------------------- */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 File::File(std::string normal, std::string errors)
23
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
160 : m_outputNormal(std::move(normal))
03068f5ed79d Misc: various style issues, #419
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
161 , m_outputError(std::move(errors))
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
164
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 void File::write(Level level, const std::string &line) noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 std::string &path = (level == Level::Warning) ? m_outputError : m_outputNormal;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 std::ofstream output(path, std::ofstream::out | std::ofstream::app);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
169
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 output << line << std::endl;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
172
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 /* --------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 * Silent
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 * -------------------------------------------------------- */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
176
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 void Silent::write(Level, const std::string &) noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
180
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 /* --------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 * Syslog
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 * -------------------------------------------------------- */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
184
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 #if defined(HAVE_SYSLOG)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
186
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 Syslog::Syslog()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 openlog(sys::programName().c_str(), LOG_PID, LOG_DAEMON);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
191
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 Syslog::~Syslog()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 closelog();
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
196
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 void Syslog::write(Level level, const std::string &line) noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 int syslogLevel;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
200
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 switch (level) {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 case Level::Warning:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 syslogLevel = LOG_WARNING;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 break;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 case Level::Debug:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 syslogLevel = LOG_DEBUG;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 break;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 case Level::Info:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 /* FALLTHROUGH */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 default:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 syslogLevel = LOG_INFO;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 break;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
214
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 syslog(syslogLevel | LOG_USER, "%s", line.c_str());
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
217
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 #endif // !HAVE_SYSLOG
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
219
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 /* --------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 * Functions
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 * -------------------------------------------------------- */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
223
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 void setInterface(std::unique_ptr<Interface> ifaceValue) noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 iface = std::move(ifaceValue);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 bufferInfo.setInterface(iface.get());
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 bufferWarning.setInterface(iface.get());
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 bufferDebug.setInterface(iface.get());
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
231
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 std::ostream &info() noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 return streamInfo;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
236
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 std::ostream &warning() noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 return streamWarning;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
241
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 std::ostream &debug() noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 return streamDebug;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
246
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 bool isVerbose() noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 return verbose;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 void setVerbose(bool mode) noexcept
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 verbose = mode;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
256
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 } // !log
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
258
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 } // !irccd