qoflog.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *            qof-log.h
00003  *
00004  *  Mon Nov 21 14:35:26 2005
00005  *  Author: Rob Clark (rclark@cs.hmc.edu)
00006  *  Copyright (C) 1998-2003 Linas Vepstas <linas@linas.org>
00007  *  Copyright  2005  Neil Williams
00008  *  linux@codehelp.co.uk
00009  ****************************************************************************/
00010 /*
00011  *  This program is free software; you can redistribute it and/or modify
00012  *  it under the terms of the GNU General Public License as published by
00013  *  the Free Software Foundation; either version 2 of the License, or
00014  *  (at your option) any later version.
00015  *
00016  *  This program is distributed in the hope that it will be useful,
00017  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  *  GNU General Public License for more details.
00020  *
00021  *  You should have received a copy of the GNU General Public License
00022  *  along with this program; if not, write to the Free Software
00023  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00024  *  02110-1301,  USA
00025  */
00026 
00034 #ifndef _QOF_LOG_H
00035 #define _QOF_LOG_H
00036 
00037 #include <stdarg.h>
00038 #include <stdio.h>
00039 #include "qofutil.h"
00040 
00041 #define QOF_MOD_ENGINE "qof-engine"
00042 
00043 #define LOG_LEVEL_LIST(_) \
00044   _(QOF_LOG_FATAL, = 0)   \
00045   _(QOF_LOG_ERROR, = 1)   \
00046   _(QOF_LOG_WARNING, = 2) \
00047   _(QOF_LOG_INFO, = 3)    \
00048   _(QOF_LOG_DEBUG, = 4)   \
00049   _(QOF_LOG_DETAIL, = 5)  \
00050   _(QOF_LOG_TRACE, = 6)
00051 
00052 DEFINE_ENUM (QofLogLevel, LOG_LEVEL_LIST)
00053 
00054 AS_STRING_DEC(QofLogLevel, LOG_LEVEL_LIST) 
00061 FROM_STRING_DEC(QofLogLevel, LOG_LEVEL_LIST) 
00068 void qof_log_add_indent(void);
00069 
00071 gint qof_log_get_indent(void);
00072 
00077 void qof_log_drop_indent(void);
00078 
00089 void qof_log_init (void);
00090 
00096 void qof_log_set_level(QofLogModule module, QofLogLevel level);
00097 
00118 void qof_log_set_level_registered(QofLogLevel level);
00119 
00126 void qof_log_set_file (FILE *outfile);
00127 
00132 void qof_log_init_filename (const gchar* logfilename);
00133 
00135 void qof_log_shutdown (void);
00136 
00140 const gchar * qof_log_prettify (const gchar *name);
00141 
00143 gboolean qof_log_check(QofLogModule log_module, QofLogLevel log_level);
00144 
00146 void qof_log_set_default(QofLogLevel log_level);
00147 
00148 typedef void (*QofLogCB) (QofLogModule log_module, QofLogLevel* log_level, 
00149                         gpointer user_data);
00150 
00156 void qof_log_module_foreach(QofLogCB cb, gpointer data);
00157 
00159 gint qof_log_module_count(void);
00160 
00161 #define FUNK qof_log_prettify(__FUNCTION__)
00162 
00174 #define FATAL(format, args...) do {                  \
00175     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR,          \
00176       "Fatal Error: %s(): " format, FUNK , ## args); \
00177 } while (0)
00178 
00180 #define PERR(format, args...) do {                   \
00181   if (qof_log_check (log_module, QOF_LOG_ERROR)) {   \
00182     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,     \
00183       "Error: %s(): " format, FUNK , ## args);     \
00184   }                                                \
00185 } while (0)
00186 
00188 #define PWARN(format, args...) do {                    \
00189   if (qof_log_check (log_module, QOF_LOG_WARNING)) {   \
00190     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,      \
00191       "Warning: %s(): " format, FUNK , ## args);   \
00192   }                                                \
00193 } while (0)
00194 
00196 #define PINFO(format, args...) do {                 \
00197   if (qof_log_check (log_module, QOF_LOG_INFO)) {   \
00198     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO,         \
00199       "Info: %s(): " format,                       \
00200       FUNK , ## args);                             \
00201   }                                                \
00202 } while (0)
00203 
00205 #define DEBUG(format, args...) do {                 \
00206   if (qof_log_check (log_module, QOF_LOG_DEBUG)) {  \
00207     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,        \
00208       "Debug: %s(): " format,                      \
00209       FUNK , ## args);                             \
00210   }                                                \
00211 } while (0)
00212 
00214 #define ENTER(format, args...) do {                 \
00215   if (qof_log_check (log_module, QOF_LOG_DEBUG)) {  \
00216     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,        \
00217       "Enter in %s: %s()" format, __FILE__,        \
00218       FUNK , ## args);                             \
00219     qof_log_add_indent();                           \
00220   }                                                \
00221 } while (0)
00222 
00224 #define LEAVE(format, args...) do {                 \
00225   if (qof_log_check (log_module, QOF_LOG_DEBUG)) {  \
00226     qof_log_drop_indent();                          \
00227     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,        \
00228       "Leave: %s()" format,                        \
00229       FUNK , ## args);                             \
00230   }                                                \
00231 } while (0)
00232 
00234 #define TRACE(format, args...) do {                 \
00235   if (qof_log_check (log_module, QOF_LOG_TRACE)) {  \
00236     g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,        \
00237       "Trace: %s(): " format, FUNK , ## args);     \
00238   }                                                \
00239 } while (0)
00240 
00241 #define DEBUGCMD(x) do {                            \
00242   if (qof_log_check (log_module, QOF_LOG_DEBUG)) {  \
00243                 (x);                                        \
00244         }                                               \
00245 } while (0)
00246 
00247 /* -------------------------------------------------------- */
00252 void qof_start_clock (gint clockno, QofLogModule log_module, QofLogLevel log_level,
00253                       const gchar *function_name, const gchar *format, ...);
00254 
00255 void qof_report_clock (gint clockno,
00256                        QofLogModule log_module,
00257                        QofLogLevel log_level,
00258                        const gchar *function_name,
00259                        const gchar *format, ...);
00260 
00261 void qof_report_clock_total (gint clockno,
00262                              QofLogModule log_module,
00263                              QofLogLevel log_level,
00264                              const gchar *function_name,
00265                              const gchar *format, ...);
00266 
00268 #define START_CLOCK(clockno,format, args...) do {        \
00269   if (qof_log_check (log_module, QOF_LOG_INFO))          \
00270     qof_start_clock (clockno, log_module, QOF_LOG_INFO,  \
00271              __FUNCTION__, format , ## args);               \
00272 } while (0)
00273 
00275 #define REPORT_CLOCK(clockno,format, args...) do {       \
00276   if (qof_log_check (log_module, QOF_LOG_INFO))          \
00277     qof_report_clock (clockno, log_module, QOF_LOG_INFO, \
00278              __FUNCTION__, format , ## args);               \
00279 } while (0)
00280 
00282 #define REPORT_CLOCK_TOTAL(clockno,format, args...) do {       \
00283   if (qof_log_check (log_module, QOF_LOG_INFO))                \
00284     qof_report_clock_total (clockno, log_module, QOF_LOG_INFO, \
00285              __FUNCTION__, format , ## args);               \
00286 } while (0)
00287 
00288 
00289 #endif /* _QOF_LOG_H */
00290 

Generated on Fri May 12 18:00:33 2006 for QOF by  doxygen 1.4.4