Fawkes API  Fawkes Development Version
component.cpp
1 
2 /***************************************************************************
3  * component.cpp - Component logger
4  *
5  * Created: Wed Mar 12 23:46:34 2008
6  * Copyright 2006-2008 Tim Niemueller [www.niemueller.de]
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version. A runtime exception applies to
14  * this software (see LICENSE.GPL_WRE file mentioned below for details).
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Library General Public License for more details.
20  *
21  * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22  */
23 
24 #include <logging/component.h>
25 #include <logging/logger.h>
26 
27 #include <cstring>
28 #include <cstdlib>
29 #include <cstdio>
30 
31 namespace fawkes {
32 
33 /** @class ComponentLogger <logging/component.h>
34  * Component logger.
35  * This is a small wrapper around a logger to make it simpler to use in a
36  * single component. Once initialized it will only accept messages for a
37  * specific component string offers a simplified interface to logging methods.
38  *
39  * @author Tim Niemueller
40  */
41 
42 /** Constructor.
43  * @param logger logger to use
44  * @param component component string, copied to internal buffer
45  */
46 ComponentLogger::ComponentLogger(Logger *logger, const char *component)
47 {
48  __logger = logger;
49  __component = strdup(component);
50 }
51 
52 
53 /** Destructor. */
55 {
56  free(__component);
57 }
58 
59 
60 /** Set a new component name.
61  * @param format format string for the new command string, cf. sprintf
62  * man page for allowed syntax.
63  */
64 void
65 ComponentLogger::set_component(const char *format, ...)
66 {
67  va_list arg;
68  va_start(arg, format);
69  char *new_component;
70  if (vasprintf(&new_component, format, arg) > 0) {
71  char *old_component = __component;
72  __component = new_component;
73  free(old_component);
74  }
75  va_end(arg);
76 }
77 
78 /** Log debug message.
79  * @param format format of the message, see man page of sprintf for available
80  * tokens.
81  */
82 void
83 ComponentLogger::log_debug(const char *format, ...)
84 {
85  va_list va;
86  va_start(va, format);
87  __logger->vlog_debug(__component, format, va);
88  va_end(va);
89 }
90 
91 
92 /** Log info message.
93  * @param format format of the message, see man page of sprintf for available
94  * tokens.
95  */
96 void
97 ComponentLogger::log_info(const char *format, ...)
98 {
99  va_list va;
100  va_start(va, format);
101  __logger->vlog_info(__component, format, va);
102  va_end(va);
103 }
104 
105 
106 /** Log warning message.
107  * @param format format of the message, see man page of sprintf for available
108  * tokens.
109  */
110 void
111 ComponentLogger::log_warn(const char *format, ...)
112 {
113  va_list va;
114  va_start(va, format);
115  __logger->vlog_warn(__component, format, va);
116  va_end(va);
117 }
118 
119 
120 /** Log error message.
121  * @param format format of the message, see man page of sprintf for available
122  * tokens.
123  */
124 void
125 ComponentLogger::log_error(const char *format, ...)
126 {
127  va_list va;
128  va_start(va, format);
129  __logger->vlog_error(__component, format, va);
130  va_end(va);
131 }
132 
133 
134 /** Log debug message.
135  * @param message message to log
136  */
137 void
138 ComponentLogger::log_debug(std::string message)
139 {
140  __logger->log_debug(__component, "%s", message.c_str());
141 }
142 
143 
144 /** Log info message.
145  * @param message message to log
146  */
147 void
148 ComponentLogger::log_info(std::string message)
149 {
150  __logger->log_info(__component, "%s", message.c_str());
151 }
152 
153 
154 /** Log warning message.
155  * @param message message to log
156  */
157 void
158 ComponentLogger::log_warn(std::string message)
159 {
160  __logger->log_warn(__component, "%s", message.c_str());
161 }
162 
163 
164 /** Log error message.
165  * @param message message to log
166  */
167 void
168 ComponentLogger::log_error(std::string message)
169 {
170  __logger->log_error(__component, "%s", message.c_str());
171 }
172 
173 
174 /** Log exception at debug log level.
175  * @param e exception to log, exception messages will be logged
176  */
177 void
179 {
180  __logger->log_debug(__component, e);
181 }
182 
183 
184 /** Log exception at info log level.
185  * @param e exception to log, exception messages will be logged
186  */
187 void
189 {
190  __logger->log_info(__component, e);
191 }
192 
193 
194 /** Log exception at warn log level.
195  * @param e exception to log, exception messages will be logged
196  */
197 void
199 {
200  __logger->log_warn(__component, e);
201 }
202 
203 
204 /** Log exception at error log level.
205  * @param e exception to log, exception messages will be logged
206  */
207 void
209 {
210  __logger->log_debug(__component, e);
211 }
212 
213 
214 } // end namespace fawkes
virtual void vlog_warn(const char *component, const char *format, va_list va)=0
Log warning message.
~ComponentLogger()
Destructor.
Definition: component.cpp:54
virtual void log_info(const char *component, const char *format,...)=0
Log informational message.
virtual void vlog_debug(const char *component, const char *format, va_list va)=0
Log debug message.
Fawkes library namespace.
virtual void vlog_error(const char *component, const char *format, va_list va)=0
Log error message.
void log_info(const char *format,...)
Log info message.
Definition: component.cpp:97
Base class for exceptions in Fawkes.
Definition: exception.h:36
void log_debug(const char *format,...)
Log debug message.
Definition: component.cpp:83
ComponentLogger(Logger *logger, const char *component)
Constructor.
Definition: component.cpp:46
virtual void vlog_info(const char *component, const char *format, va_list va)=0
Log informational message.
void set_component(const char *format,...)
Set a new component name.
Definition: component.cpp:65
virtual void log_warn(const char *component, const char *format,...)=0
Log warning message.
virtual void log_error(const char *component, const char *format,...)=0
Log error message.
void log_error(const char *format,...)
Log error message.
Definition: component.cpp:125
void log_warn(const char *format,...)
Log warning message.
Definition: component.cpp:111
virtual void log_debug(const char *component, const char *format,...)=0
Log debug message.
Interface for logging.
Definition: logger.h:34