1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_core_tracing_Logger_hpp
10 #define anna_core_tracing_Logger_hpp
18 #include <anna/core/mt/NRMutex.hpp>
19 #include <anna/core/mt/Guard.hpp>
26 Facilidad para la realizacion de archivos de historico (logs) de nuestra aplicacion.
28 @see Patron proxy http://maniaco/anna/docs/html/DesingPatterns//pat4gfso.htm
33 Nivel de las trazas de historico.
35 Para mas informacion ver los niveles de emergencia listados en: man syslog.conf
40 Emergency = LOG_EMERG,
41 Alert = LOG_ALERT, Critical = LOG_CRIT, Error = LOG_ERR, Warning = LOG_WARNING,
42 Notice = LOG_NOTICE, Information = LOG_INFO, Debug = LOG_DEBUG,
43 Local0 = LOG_LOCAL0, Local1 = LOG_LOCAL1, Local2 = LOG_LOCAL2, Local3 = LOG_LOCAL3,
44 Local4 = LOG_LOCAL4, Local5 = LOG_LOCAL5, Local6 = LOG_LOCAL6, Local7 = LOG_LOCAL7
48 Clase virtual que debemos asociar al Logger para transferir las trazas al medio
61 Metodo virtual que debe inicializar el funcionamiento del Writer particular.
63 @param id Identificador logico. Usado en el DefaultWriter para inicializar el sistema
64 del log (metodo syslog).
66 virtual void initialize(const char* id) throw() = 0;
69 Transfiere el mensaje de trazas al log del sistema. El metodo implementado debe ser
71 No es necesario realizar ningun control del nivel de trazas establecido ya que si la
72 clase Logger ha decidido llamar a este metodo es porque el nivel indicado esta
75 @param level Nivel de las trazas que vamos a sacar.
76 @param text Especificacion de formato del mensaje. Similar al usado en el comando sprintf.
78 virtual void do_write(int level, const char* text, ...) throw() = 0;
84 @param bufferSize Numero de bytes reservado para la linea de trazas.
86 Writer(const int bufferSize);
94 @return La instancia del bloque de datos con memoria reservada para poder interpretar los
97 DataBlock& getDataBlock() throw() { return *a_dataBlock; }
100 DataBlock* a_dataBlock;
104 Inicializa el sistema de historico de nuestra aplicacion. Solo debe invocarse una unica vez
105 al comienzo de la aplicacion.
107 Al no indicar ninguna clase encargada de transferir los datos de la aplicacion al
108 sistema de historico se establece el Writer por defecto.
110 Este metodo no es MT-safe por lo que tenemos que estar seguros que no se puede invocar desde
111 varios thread simultaneamente. Lo mas aconsejable es invocarlo desde el comienzo de la
114 @param ident Identifica las trazas de nuestra aplicacion que apareceran en el archivo de historico.
115 Deberia ser un texto con entre 4 y 16 caracteres.
119 static void initialize(const char* ident) throw();
122 Inicializa el sistema de historico de nuestra aplicacion. Solo debe invocarse una unica vez
123 al comienzo de la aplicacion.
125 Este metodo no es MT-safe por lo que tenemos que estar seguros que no se puede invocar desde
126 varios thread simultaneamente. Lo mas aconsejable es invocarlo desde el comienzo de la
129 @param ident Identifica las trazas de nuestra aplicacion que apareceran en el archivo de historico.
130 Deberia ser un texto con entre 4 y 16 caracteres.
131 @param writer Establece el objeto encargado de transferir los datos de la aplicacion
132 al sistema de historico. La instancia pasada como parametro debera estar disponible mientras
133 no termine la ejecucion de nuestra aplicacion. Podemos indicar NULL para desactivar
134 completamente cualquier sistema de trazas.
138 static void initialize(const char* ident, Writer* writer) throw();
141 @return El nivel de trazado de nuestra aplicacion.
143 static Level getLevel() throw() { return st_level; }
146 Establece el nivel de trazado de nuestra aplicacion. El nivel de trazado por defecto
147 de nuestra aplicacion dependera del modo de compilacion, en modo depuracion el nivel
148 de trazado por defecto sera Debug, en otro caso sera Warning.
150 Solo apareceran en el historico las trazas que lleven un nivel menor que el establecido
153 @param level Nivel de trazado que deseamos establecer.
155 static void setLevel(const Level level)
156 throw(RuntimeException) {
157 Guard guard(st_mutex, "Logger::setLevel");
158 st_level = (level <= Error) ? Error : level;
162 Comprueba si el nivel de trazado recibido como parametro esta activo en nuestra aplicacion.
164 @param level Nivel de trazado que deseamos comprobar.
166 @return @em true Si el nivel de trazado de nuestra aplicacion es mayor que el recibido como
167 parametro o @em false en otro caso.
169 static bool isActive(const Level level) throw() {
170 return (st_writer != NULL && level <= Error) ? true : (st_enabled && level <= st_level && st_writer != NULL);
174 Desactiva el sistema de trazado.
176 static void disable() throw(RuntimeException);
179 Activa el sistema de trazado y establece el nivel de trazado existente antes
180 de la desactivacion (Ver #disable).
182 static void enable() throw(RuntimeException);
185 * Establece el valor del indicador que hace que se vuelque el PID del proceso en la linea de trazas.
187 * Puede ser util cuando el programa principal cree procesos hijos mediante a la invocacion al metodo \em fork.
189 * \param showPID Valor del indicador.
191 static void showPID(const bool show) throw();
194 Traza el texto recibido en el historico con el nivel indicado.
196 La traza solo sera registrada en el historico si el nivel de trazado recibido como
197 parametro esta habilitado.
199 @param level Nivel de la traza que deseamos registrar.
200 @param text Texto de la traza.
201 @param fromFile Nombre del archivo donde se genera la traza.
202 @param fromLine Numero de linea del archivo donde se genera la traza.
204 static void write(const Level level, const char* text, const char* fromFile, const int fromLine) throw();
207 Traza el texto recibido en el historico con el nivel indicado.
209 La traza solo sera registrada en el historico si el nivel de trazado recibido como
210 parametro esta habilitado.
212 @param level Nivel de la traza que deseamos registrar.
213 @param text Texto de la traza.
214 @param fromFile Nombre del archivo donde se genera la traza.
215 @param fromLine Numero de linea del archivo donde se genera la traza.
217 static void write(const Level level, const std::string& text, const char* fromFile, const int fromLine) throw() {
218 write(level, text.c_str(), fromFile, fromLine);
222 Traza el texto recibido en el historico con el nivel indicado.
224 La traza solo sera registrada en el historico si el nivel de trazado recibido como
225 parametro esta habilitado.
227 @param level Nivel de la traza que deseamos registrar.
228 @param text Texto de la traza.
229 @param value Contenido de una cadena.
230 @param fromFile Nombre del archivo donde se genera la traza.
231 @param fromLine Numero de linea del archivo donde se genera la traza.
233 static void write(const Level level, const char* text, const char* value, const char* fromFile, const int fromLine) throw();
236 Traza el texto recibido en el historico con el nivel indicado.
238 La traza solo sera registrada en el historico si el nivel de trazado recibido como
239 parametro esta habilitado.
241 @param level Nivel de la traza que deseamos registrar.
242 @param text Texto de la traza.
243 @param value Contenido de una cadena.
244 @param fromFile Nombre del archivo donde se genera la traza.
245 @param fromLine Numero de linea del archivo donde se genera la traza.
247 static void write(const Level level, const char* text, const std::string& value, const char* fromFile, const int fromLine)
249 write(level, text, value.c_str(), fromFile, fromLine);
253 Traza el texto recibido en el historico con el nivel indicado.
255 La traza solo sera registrada en el historico si el nivel de trazado recibido como
256 parametro esta habilitado.
258 @param level Nivel de la traza que deseamos registrar.
259 @param text Texto de la traza.
260 @param value Contenido de una cadena.
261 @param fromFile Nombre del archivo donde se genera la traza.
262 @param fromLine Numero de linea del archivo donde se genera la traza.
264 static void write(const Level level, const std::string& text, const std::string& value, const char* fromFile, const int fromLine)
266 write(level, text.c_str(), value.c_str(), fromFile, fromLine);
270 Traza el texto recibido en el historico con el nivel indicado.
272 La traza solo sera registrada en el historico si el nivel de trazado recibido como
273 parametro esta habilitado.
275 @param level Nivel de la traza que deseamos registrar.
276 @param text Texto de la traza.
277 @param value Valor numerico.
278 @param fromFile Nombre del archivo donde se genera la traza.
279 @param fromLine Numero de linea del archivo donde se genera la traza.
281 static void write(const Level level, const char* text, const int value, const char* fromFile, const int fromLine)
285 Traza el texto recibido en el historico con el nivel indicado.
287 La traza solo sera registrada en el historico si el nivel de trazado recibido como
288 parametro esta habilitado.
290 @param level Nivel de la traza que deseamos registrar.
291 @param text Texto de la traza.
292 @param value Bloque de datos a transferir al log del sistema.
293 @param fromFile Nombre del archivo donde se genera la traza.
294 @param fromLine Numero de linea del archivo donde se genera la traza.
296 static void write(const Level level, const char* text, const DataBlock& value, const char* fromFile, const int fromLine)
300 Si el nivel \em Debug esta activado traza el texto recibido en el historico.
301 @param text Texto de la traza.
302 @param fromFile Nombre del archivo donde se genera la traza.
303 @param fromLine Numero de linea del archivo donde se genera la traza.
305 static void debug(const std::string& text, const char* fromFile, const int fromLine)
307 write(Logger::Debug, text, fromFile, fromLine);
311 Si el nivel \em Information esta activado traza el texto recibido en el historico.
312 @param text Texto de la traza.
313 @param fromFile Nombre del archivo donde se genera la traza.
314 @param fromLine Numero de linea del archivo donde se genera la traza.
316 static void information(const std::string& text, const char* fromFile, const int fromLine)
318 write(Logger::Information, text, fromFile, fromLine);
322 Si el nivel \em Notice esta activado traza el texto recibido en el historico.
323 @param text Texto de la traza.
324 @param fromFile Nombre del archivo donde se genera la traza.
325 @param fromLine Numero de linea del archivo donde se genera la traza.
327 static void notice(const std::string& text, const char* fromFile, const int fromLine)
329 write(Logger::Notice, text, fromFile, fromLine);
333 Si el nivel \em Warning esta activado traza el texto recibido en el historico.
334 @param text Texto de la traza.
335 @param fromFile Nombre del archivo donde se genera la traza.
336 @param fromLine Numero de linea del archivo donde se genera la traza.
338 static void warning(const std::string& text, const char* fromFile, const int fromLine)
340 write(Logger::Warning, text, fromFile, fromLine);
344 Si el nivel \em Error esta activado traza el texto recibido en el historico.
345 @param text Texto de la traza.
346 @param fromFile Nombre del archivo donde se genera la traza.
347 @param fromLine Numero de linea del archivo donde se genera la traza.
349 static void error(const std::string& text, const char* fromFile, const int fromLine)
351 write(Logger::Error, text, fromFile, fromLine);
355 Si el nivel \em Critical esta activado traza el texto recibido en el historico.
356 @param text Texto de la traza.
357 @param fromFile Nombre del archivo donde se genera la traza.
358 @param fromLine Numero de linea del archivo donde se genera la traza.
360 static void critical(const std::string& text, const char* fromFile, const int fromLine)
362 write(Logger::Critical, text, fromFile, fromLine);
366 Si el nivel \em Alert esta activado traza el texto recibido en el historico.
367 @param text Texto de la traza.
368 @param fromFile Nombre del archivo donde se genera la traza.
369 @param fromLine Numero de linea del archivo donde se genera la traza.
371 static void alert(const std::string& text, const char* fromFile, const int fromLine)
373 write(Logger::Alert, text, fromFile, fromLine);
377 Si el nivel \em Emergency esta activado traza el texto recibido en el historico.
378 @param text Texto de la traza.
379 @param fromFile Nombre del archivo donde se genera la traza.
380 @param fromLine Numero de linea del archivo donde se genera la traza.
382 static void emergency(const std::string& text, const char* fromFile, const int fromLine)
384 write(Logger::Emergency, text, fromFile, fromLine);
388 @return La cadena que identifica al nivel recibido como parametro.
391 static const char* asString(const Level level) throw();
394 Traduce la cadena recibida al nivel correspondiente.
396 @param level Cadena que deberia contener un nombre de nivel (emerg, alert, crit, err, warning, notice, info, debug).
398 \warning Debe de ser alguno de los siguiente literales: emerg, alert, crit, err, warning, notice, info, debug
400 static Level asLevel(const char* level) throw(RuntimeException);
403 static NRMutex st_mutex;
404 static Level st_level;
405 static bool st_enabled;
406 static Writer* st_writer;
414 friend class Logger::Writer;