33 #define QOF_LOG_MAX_CHARS 50 34 #define QOF_LOG_INDENT_WIDTH 4 36 static FILE *fout = NULL;
37 static gchar *filename = NULL;
38 static gchar *function_buffer = NULL;
39 static const gint MAX_TRACE_FILENAME = 100;
40 static GHashTable *log_table = NULL;
41 static gint qof_log_num_spaces = 0;
50 qof_log_num_spaces += QOF_LOG_INDENT_WIDTH;
56 return qof_log_num_spaces;
62 qof_log_num_spaces = (qof_log_num_spaces < QOF_LOG_INDENT_WIDTH) ?
63 0 : qof_log_num_spaces - QOF_LOG_INDENT_WIDTH;
67 fh_printer (
const gchar * log_domain __attribute__ ((unused)),
68 GLogLevelFlags log_level __attribute__ ((unused)),
69 const gchar * message, gpointer user_data)
72 fprintf (fh,
"%*s%s\n", qof_log_num_spaces,
"", message);
81 fout = fopen (
"/tmp/qof.trace",
"w");
84 if (!fout && (filename = (gchar *) g_malloc (MAX_TRACE_FILENAME)))
86 snprintf (filename, MAX_TRACE_FILENAME - 1,
"/tmp/qof.trace.%d",
88 fout = fopen (filename,
"w");
95 g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MASK, fh_printer, fout);
103 if (!log_module || level == 0)
110 log_table = g_hash_table_new (g_str_hash, g_str_equal);
112 g_hash_table_insert (log_table, (gpointer) log_module, level_string);
116 log_module_foreach (gpointer key,
117 gpointer value __attribute__ ((unused)), gpointer data)
119 g_hash_table_insert (log_table, key, data);
127 if (!log_table || level == 0)
132 g_hash_table_foreach (log_table, log_module_foreach, level_string);
155 filename = g_strdup (logfilename);
156 fout = fopen (filename,
"w");
164 if (fout && fout != stderr)
174 g_free (function_buffer);
176 g_hash_table_destroy (log_table);
189 buffer = g_strndup (name, QOF_LOG_MAX_CHARS - 1);
190 length = strlen (buffer);
191 p = g_strstr_len (buffer, length,
"(");
199 strcpy (&buffer[QOF_LOG_MAX_CHARS - 4],
"...()");
201 function_buffer = g_strdup (buffer);
203 return function_buffer;
214 if (log_level > QOF_LOG_TRACE)
215 log_level = QOF_LOG_TRACE;
216 if (!log_table || log_module == NULL)
220 log_string = (gchar *) g_hash_table_lookup (log_table, log_module);
227 if (log_level <= maximum)
263 hash_cb (gpointer key, gpointer value, gpointer data)
265 struct hash_s *qiter;
267 qiter = (
struct hash_s *) data;
272 (qiter->cb) (key, value, qiter->data);
286 g_hash_table_foreach (log_table, hash_cb, (gpointer) &qiter);
296 return g_hash_table_size (log_table);
void qof_log_init_filename(const gchar *logfilename)
gint qof_log_get_indent(void)
gboolean qof_log_check(QofLogModule log_module, QofLogLevel log_level)
const gchar * qof_log_prettify(const gchar *name)
void qof_log_shutdown(void)
void qof_log_module_foreach(QofLogCB cb, gpointer data)
gint qof_log_module_count(void)
void qof_log_set_default(QofLogLevel log_level)
const gchar * QofLogLevelasString(QofLogLevel n)
void qof_log_add_indent(void)
void qof_log_drop_indent(void)
void qof_log_set_level_registered(QofLogLevel level)
void qof_log_set_level(QofLogModule log_module, QofLogLevel level)
const gchar * QofLogModule
QofLogLevel QofLogLevelfromString(const gchar *str)
void qof_log_set_file(FILE *outfile)