blob: 47dc34741053535fe78e1e70a53a7c26b3712f80 [file] [log] [blame]
Shawn McCarney7c5d7b22020-04-03 18:50:13 -05001/**
2 * Copyright © 2020 IBM Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#pragma once
17
Shawn McCarney5248b8a2020-07-15 22:59:36 -050018#include <phosphor-logging/log.hpp>
19
Shawn McCarney7c5d7b22020-04-03 18:50:13 -050020#include <string>
Shawn McCarney5248b8a2020-07-15 22:59:36 -050021#include <vector>
22
23namespace phosphor::power::regulators
24{
25
26/**
27 * @class Journal
28 *
29 * Abstract base class that provides a journal interface.
30 *
31 * The interface is used to write messages/log entries to the system journal.
32 */
33class Journal
34{
35 public:
36 // Specify which compiler-generated methods we want
37 Journal() = default;
38 Journal(const Journal&) = delete;
39 Journal(Journal&&) = delete;
40 Journal& operator=(const Journal&) = delete;
41 Journal& operator=(Journal&&) = delete;
42 virtual ~Journal() = default;
43
44 /**
45 * Logs a debug message in the system journal.
46 *
47 * @param message message to log
48 */
49 virtual void logDebug(const std::string& message) = 0;
50
51 /**
52 * Logs debug messages in the system journal.
53 *
54 * @param messages messages to log
55 */
56 virtual void logDebug(const std::vector<std::string>& messages) = 0;
57
58 /**
59 * Logs an error message in the system journal.
60 *
61 * @param message message to log
62 */
63 virtual void logError(const std::string& message) = 0;
64
65 /**
66 * Logs error messages in the system journal.
67 *
68 * @param messages messages to log
69 */
70 virtual void logError(const std::vector<std::string>& messages) = 0;
71
72 /**
73 * Logs an informational message in the system journal.
74 *
75 * @param message message to log
76 */
77 virtual void logInfo(const std::string& message) = 0;
78
79 /**
80 * Logs informational messages in the system journal.
81 *
82 * @param messages messages to log
83 */
84 virtual void logInfo(const std::vector<std::string>& messages) = 0;
85};
86
87/**
88 * @class SystemdJournal
89 *
90 * Implementation of the Journal interface that writes to the systemd journal.
91 */
92class SystemdJournal : public Journal
93{
94 public:
95 // Specify which compiler-generated methods we want
96 SystemdJournal() = default;
97 SystemdJournal(const SystemdJournal&) = delete;
98 SystemdJournal(SystemdJournal&&) = delete;
99 SystemdJournal& operator=(const SystemdJournal&) = delete;
100 SystemdJournal& operator=(SystemdJournal&&) = delete;
101 virtual ~SystemdJournal() = default;
102
103 /** @copydoc Journal::logDebug(const std::string&) */
104 virtual void logDebug(const std::string& message) override
105 {
106 using namespace phosphor::logging;
107 log<level::DEBUG>(message.c_str());
108 }
109
110 /** @copydoc Journal::logDebug(const std::vector<std::string>&) */
111 virtual void logDebug(const std::vector<std::string>& messages) override
112 {
113 for (const std::string& message : messages)
114 {
115 logDebug(message);
116 }
117 }
118
119 /** @copydoc Journal::logError(const std::string&) */
120 virtual void logError(const std::string& message) override
121 {
122 using namespace phosphor::logging;
123 log<level::ERR>(message.c_str());
124 }
125
126 /** @copydoc Journal::logError(const std::vector<std::string>&) */
127 virtual void logError(const std::vector<std::string>& messages) override
128 {
129 for (const std::string& message : messages)
130 {
131 logError(message);
132 }
133 }
134
135 /** @copydoc Journal::logInfo(const std::string&) */
136 virtual void logInfo(const std::string& message) override
137 {
138 using namespace phosphor::logging;
139 log<level::INFO>(message.c_str());
140 }
141
142 /** @copydoc Journal::logInfo(const std::vector<std::string>&) */
143 virtual void logInfo(const std::vector<std::string>& messages) override
144 {
145 for (const std::string& message : messages)
146 {
147 logInfo(message);
148 }
149 }
150};
151
152} // namespace phosphor::power::regulators