Files | |
file | qoflog.h |
QOF error logging and tracing facility. | |
Defines | |
#define | QOF_MOD_ENGINE "qof-engine" |
#define | LOG_LEVEL_LIST(_) |
#define | FUNK qof_log_prettify(__FUNCTION__) |
#define | FATAL(format, args...) |
#define | PERR(format, args...) |
#define | PWARN(format, args...) |
#define | PINFO(format, args...) |
#define | DEBUG(format, args...) |
#define | ENTER(format, args...) |
#define | LEAVE(format, args...) |
#define | TRACE(format, args...) |
#define | DEBUGCMD(x) |
Typedefs | |
typedef void(* | QofLogCB )(QofLogModule log_module, QofLogLevel *log_level, gpointer user_data) |
Enumerations | |
enum | QofLogLevel { QOF_LOG_FATAL = 0, QOF_LOG_ERROR = 1, QOF_LOG_WARNING = 2, QOF_LOG_INFO = 3, QOF_LOG_DEBUG = 4, QOF_LOG_DETAIL = 5, QOF_LOG_TRACE = 6 } |
Functions | |
const gchar * | QofLogLevelasString (QofLogLevel n) |
QofLogLevel | QofLogLevelfromString (const gchar *str) |
void | qof_log_add_indent (void) |
gint | qof_log_get_indent (void) |
void | qof_log_drop_indent (void) |
void | qof_log_init (void) |
void | qof_log_set_level (QofLogModule module, QofLogLevel level) |
void | qof_log_set_level_registered (QofLogLevel level) |
void | qof_log_set_file (FILE *outfile) |
void | qof_log_init_filename (const gchar *logfilename) |
void | qof_log_shutdown (void) |
const gchar * | qof_log_prettify (const gchar *name) |
gboolean | qof_log_check (QofLogModule log_module, QofLogLevel log_level) |
void | qof_log_set_default (QofLogLevel log_level) |
void | qof_log_module_foreach (QofLogCB cb, gpointer data) |
gint | qof_log_module_count (void) |
#define DEBUG | ( | format, | |||
args... | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_DEBUG)) { \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ "Debug: %s(): " format, \ FUNK , ## args); \ } \ } while (0)
#define DEBUGCMD | ( | x | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_DEBUG)) { \ (x); \ } \ } while (0)
#define ENTER | ( | format, | |||
args... | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_DEBUG)) { \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ "Enter in %s: %s()" format, __FILE__, \ FUNK , ## args); \ qof_log_add_indent(); \ } \ } while (0)
#define FATAL | ( | format, | |||
args... | ) |
Value:
do { \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, \ "Fatal Error: %s(): " format, FUNK , ## args); \ } while (0)
Messages can be logged to stdout, stderr, or to any desired file. Log a fatal error
#define LEAVE | ( | format, | |||
args... | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_DEBUG)) { \ qof_log_drop_indent(); \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ "Leave: %s()" format, \ FUNK , ## args); \ } \ } while (0)
#define LOG_LEVEL_LIST | ( | _ | ) |
#define PERR | ( | format, | |||
args... | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_ERROR)) { \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, \ "Error: %s(): " format, FUNK , ## args); \ } \ } while (0)
#define PINFO | ( | format, | |||
args... | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_INFO)) { \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, \ "Info: %s(): " format, \ FUNK , ## args); \ } \ } while (0)
#define PWARN | ( | format, | |||
args... | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_WARNING)) { \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, \ "Warning: %s(): " format, FUNK , ## args); \ } \ } while (0)
#define TRACE | ( | format, | |||
args... | ) |
Value:
do { \ if (qof_log_check (log_module, QOF_LOG_TRACE)) { \ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ "Trace: %s(): " format, FUNK , ## args); \ } \ } while (0)
enum QofLogLevel |
void qof_log_add_indent | ( | void | ) |
gboolean qof_log_check | ( | QofLogModule | log_module, | |
QofLogLevel | log_level | |||
) |
Do not log log_modules that have not been enabled.
Definition at line 207 of file qoflog.c.
00208 { 00209 gchar *log_string; 00210 /* Any positive log_level less than this will be logged. */ 00211 QofLogLevel maximum; 00212 00213 log_string = NULL; 00214 if (log_level > QOF_LOG_TRACE) 00215 log_level = QOF_LOG_TRACE; 00216 if (!log_table || log_module == NULL) 00217 { 00218 return FALSE; 00219 } 00220 log_string = (gchar *) g_hash_table_lookup (log_table, log_module); 00221 /* if log_module not found, do not log. */ 00222 if (!log_string) 00223 { 00224 return FALSE; 00225 } 00226 maximum = QofLogLevelfromString (log_string); 00227 if (log_level <= maximum) 00228 { 00229 return TRUE; 00230 } 00231 return FALSE; 00232 }
void qof_log_drop_indent | ( | void | ) |
gint qof_log_get_indent | ( | void | ) |
void qof_log_init | ( | void | ) |
Initialize the error logging subsystem
Definition at line 77 of file qoflog.c.
00078 { 00079 if (!fout) /* allow qof_log_set_file */ 00080 { 00081 fout = fopen ("/tmp/qof.trace", "w"); 00082 } 00083 00084 if (!fout && (filename = (gchar *) g_malloc (MAX_TRACE_FILENAME))) 00085 { 00086 snprintf (filename, MAX_TRACE_FILENAME - 1, "/tmp/qof.trace.%d", 00087 getpid ()); 00088 fout = fopen (filename, "w"); 00089 g_free (filename); 00090 } 00091 00092 if (!fout) 00093 fout = stderr; 00094 00095 g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MASK, fh_printer, fout); 00096 }
void qof_log_init_filename | ( | const gchar * | logfilename | ) |
Specify a filename for log output.
Calls qof_log_init() for you.
Definition at line 147 of file qoflog.c.
00148 { 00149 if (!logfilename) 00150 { 00151 fout = stderr; 00152 } 00153 else 00154 { 00155 filename = g_strdup (logfilename); 00156 fout = fopen (filename, "w"); 00157 } 00158 qof_log_init (); 00159 }
gint qof_log_module_count | ( | void | ) |
void qof_log_module_foreach | ( | QofLogCB | cb, | |
gpointer | data | |||
) |
Iterate over each known log_module
Only log_modules with log_levels set will be available.
Definition at line 276 of file qoflog.c.
00277 { 00278 struct hash_s qiter; 00279 00280 if (!cb) 00281 { 00282 return; 00283 } 00284 qiter.cb = cb; 00285 qiter.data = data; 00286 g_hash_table_foreach (log_table, hash_cb, (gpointer) &qiter); 00287 }
const gchar* qof_log_prettify | ( | const gchar * | name | ) |
qof_log_prettify() cleans up subroutine names. AIX/xlC has the habit of printing signatures not names; clean this up. On other operating systems, truncate name to QOF_LOG_MAX_CHARS chars.
Definition at line 180 of file qoflog.c.
00181 { 00182 gchar *p, *buffer; 00183 gint length; 00184 00185 if (!name) 00186 { 00187 return ""; 00188 } 00189 buffer = g_strndup (name, QOF_LOG_MAX_CHARS - 1); 00190 length = strlen (buffer); 00191 p = g_strstr_len (buffer, length, "("); 00192 if (p) 00193 { 00194 *(p + 1) = ')'; 00195 *(p + 2) = 0x0; 00196 } 00197 else 00198 { 00199 strcpy (&buffer[QOF_LOG_MAX_CHARS - 4], "...()"); 00200 } 00201 function_buffer = g_strdup (buffer); 00202 g_free (buffer); 00203 return function_buffer; 00204 }
void qof_log_set_default | ( | QofLogLevel | log_level | ) |
Set the default QOF log_modules to the log level.
Definition at line 235 of file qoflog.c.
00236 { 00237 qof_log_set_level (QOF_MOD_BACKEND, log_level); 00238 qof_log_set_level (QOF_MOD_CLASS, log_level); 00239 qof_log_set_level (QOF_MOD_ENGINE, log_level); 00240 qof_log_set_level (QOF_MOD_OBJECT, log_level); 00241 qof_log_set_level (QOF_MOD_KVP, log_level); 00242 qof_log_set_level (QOF_MOD_MERGE, log_level); 00243 qof_log_set_level (QOF_MOD_QUERY, log_level); 00244 qof_log_set_level (QOF_MOD_SESSION, log_level); 00245 qof_log_set_level (QOF_MOD_CHOICE, log_level); 00246 qof_log_set_level (QOF_MOD_UTIL, log_level); 00247 qof_log_set_level (QOF_MOD_TIME, log_level); 00248 qof_log_set_level (QOF_MOD_DATE, log_level); 00249 qof_log_set_level (QOF_MOD_UNDO, log_level); 00250 qof_log_set_level (QOF_MOD_ERROR, log_level); 00251 qof_log_set_level (QOF_MOD_QSF, log_level); 00252 qof_log_set_level (QOF_MOD_SQLITE, log_level); 00253 qof_log_set_level (QOF_MOD_GDA, log_level); 00254 }
void qof_log_set_file | ( | FILE * | outfile | ) |
Specify an alternate log output, to pipe or file. By default, all logging goes to /tmp/qof.trace
Needs to be called before qof_log_init()
Definition at line 136 of file qoflog.c.
00137 { 00138 if (!outfile) 00139 { 00140 fout = stderr; 00141 return; 00142 } 00143 fout = outfile; 00144 }
void qof_log_set_level | ( | QofLogModule | module, | |
QofLogLevel | level | |||
) |
Set the logging level of the given log_module.
Registers the log_module with the qof_log hashtable and sets an initial value for the loglevel for that log_module.
Definition at line 99 of file qoflog.c.
00100 { 00101 gchar *level_string; 00102 00103 if (!log_module || level == 0) 00104 { 00105 return; 00106 } 00107 level_string = g_strdup (QofLogLevelasString (level)); 00108 if (!log_table) 00109 { 00110 log_table = g_hash_table_new (g_str_hash, g_str_equal); 00111 } 00112 g_hash_table_insert (log_table, (gpointer) log_module, level_string); 00113 }
void qof_log_set_level_registered | ( | QofLogLevel | level | ) |
Set the logging level for all registered log_modules.
e.g. if you are working in one section of the code and do not want the extra log information created by allowing the default modules to log as well. This makes the log itself easier to use when working in a small area of the codebase. Silent log_modules can also be useful where no default currently exists - again to isolate certain sections of the default log output - and using qof_log_set_level_registered allows these silent log_modules to be retained in the code without being logged by other developers etc.
Definition at line 123 of file qoflog.c.
00124 { 00125 gchar *level_string; 00126 00127 if (!log_table || level == 0) 00128 { 00129 return; 00130 } 00131 level_string = g_strdup (QofLogLevelasString (level)); 00132 g_hash_table_foreach (log_table, log_module_foreach, level_string); 00133 }
void qof_log_shutdown | ( | void | ) |
Be nice, close the logfile if possible.
Definition at line 162 of file qoflog.c.
00163 { 00164 if (fout && fout != stderr) 00165 { 00166 fclose (fout); 00167 } 00168 if (filename) 00169 { 00170 g_free (filename); 00171 } 00172 if (function_buffer) 00173 { 00174 g_free (function_buffer); 00175 } 00176 g_hash_table_destroy (log_table); 00177 }
const gchar* QofLogLevelasString | ( | QofLogLevel | n | ) |
Convert a QofLogLevel to the log_string
Only for use as a partner to QofLogLevelfromString
Definition at line 45 of file qoflog.c.
QofLogLevel QofLogLevelfromString | ( | const gchar * | str | ) |
Convert the log_string to a QofLogLevel
Only for use as a partner to QofLogLevelasString
Definition at line 46 of file qoflog.c.