Ethereal-dev: [Ethereal-dev] Improvement of logging functions in Ethereal on Win32
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Lars Roland <lars.roland@xxxxxxx>
Date: Fri, 27 Aug 2004 07:01:58 +0200
Hello all,I patched the logging funtions controling the output to a console window on Win32.
We can get more information about GTK and GLib Messages now.It is also possible to disable output of non-fatal GTK and GLib Messages completely by choosing GUI-Preference "Open a console window -> never".
Attached are: -patch for main.c From patched Ethereal: -console output of warnings from the about dialog as plain text file (I had to open the console window before I opened the about dialog to catch the first message) -console output of warnings and an error when choosing the last font in list (unfortunately a screenshot, no copy'n'paste possible with this error) The 2nd warning and the error say that they come from ethereal, but they come from Pango. Pango has obviously no "Logging Domain". I think this will help a lot. Please check in. Regards, Lars
Index: ethereal-new/gtk/main.c =================================================================== --- ethereal-new/gtk/main.c (revision 11842) +++ ethereal-new/gtk/main.c (working copy) @@ -106,6 +106,7 @@ #endif #ifdef WIN32 #include "capture-wpcap.h" +#include <process.h> #endif /* GTK related */ @@ -1598,17 +1599,40 @@ routine is called to log a message, we pop up a console window. We do that by inserting our own handler for all messages logged - to the default domain; that handler pops up a console if necessary, - and then calls the default handler. */ + to the default domain (our domain) and all other domains used by GLib + and GTK; that handler pops up a console if necessary and prints our + messages, unless we suppress all console output. However fatal errors + get displayed anyway. */ + /* References: + http://developer.gnome.org/doc/API/2.0/glib/glib-Message-Logging.html#g-log-set-handler + http://mail.gnome.org/archives/gtk-list/2003-June/msg00175.html */ g_log_set_handler(NULL, - G_LOG_LEVEL_ERROR| - G_LOG_LEVEL_CRITICAL| - G_LOG_LEVEL_WARNING| - G_LOG_LEVEL_MESSAGE| - G_LOG_LEVEL_INFO| - G_LOG_LEVEL_DEBUG| - G_LOG_FLAG_FATAL|G_LOG_FLAG_RECURSION, + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, console_log_handler, NULL); + + g_log_set_handler("Gdk", + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, + console_log_handler, NULL); + + g_log_set_handler("Gtk", + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, + console_log_handler, NULL); + + g_log_set_handler("GLib", + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, + console_log_handler, NULL); + + g_log_set_handler("GLib-GObject", + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, + console_log_handler, NULL); + + g_log_set_handler("GModule", + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, + console_log_handler, NULL); + + g_log_set_handler("GThread", + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, + console_log_handler, NULL); #endif command_name = get_basename(ethereal_path); @@ -2626,28 +2650,52 @@ } } -/* This routine should not be necessary, at least as I read the GLib - source code, as it looks as if GLib is, on Win32, *supposed* to - create a console window into which to display its output. +/* We use our own log handler instead of g_log_default_handler(). + This gives us the possibility to completely suppress these messages*/ - That doesn't happen, however. I suspect there's something completely - broken about that code in GLib-for-Win32, and that it may be related - to the breakage that forces us to just call "printf()" on the message - rather than passing the message on to "g_log_default_handler()" - (which is the routine that does the aforementioned non-functional - console window creation). */ static void console_log_handler(const char *log_domain, GLogLevelFlags log_level, const char *message, gpointer user_data) { create_console(); if (has_console) { - /* For some unknown reason, the above doesn't appear to actually cause - anything to be sent to the standard output, so we'll just splat the - message out directly, just to make sure it gets out. */ - printf("%s\n", message); - } else - g_log_default_handler(log_domain, log_level, message, user_data); + /* This is never true if "console_open_never" is selected. + Thus everything is suppressed */ + printf(" ------ \n"); + if (log_domain==NULL) { + /* Message from Ethereal itself */ + printf("From module: Ethereal\n"); + } + else { + printf("From module: %s\n", log_domain); + } + + if(log_level & G_LOG_LEVEL_ERROR) + printf("Category: Error\n"); + else if(log_level & G_LOG_LEVEL_CRITICAL) + printf("Category: Critical\n"); + else if(log_level & G_LOG_LEVEL_WARNING) + printf("Category: Warning\n"); + else if(log_level & G_LOG_LEVEL_MESSAGE) + printf("Category: Message\n"); + else if(log_level & G_LOG_LEVEL_INFO) + printf("Category: Informational\n"); + else if(log_level & G_LOG_LEVEL_DEBUG) + printf("Category: Debugging\n"); + else + printf("Category: Unknown\n"); + + printf("Process ID: %d\n", _getpid()); + printf("Message: %s\n ------ \n", message); + } + else + { + if(log_level & G_LOG_FLAG_FATAL) { + /* display fatal errors anyway. They will make ethereal to abort, + and we want to have some info in that case */ + g_log_default_handler(log_domain, log_level, message, user_data); + } + } } #endif
Invalid utf8 encoding: J÷rg Mayer <jmayer[AT]loplof.de> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Michael T³xen <tuexen [AT] fh-muenster.de> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Kent Engstr÷m <kent[AT]unit.liu.se> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Eduardo PÚrez Ureta <eperez[AT]dei.inf.uc3m.es> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Ricardo Barroetave±a <rbarroetavena[AT]veufort.com> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Erik Nordstr÷m <erik.nordstrom[AT]it.uu.se> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Lo´c Minier <lool [AT] dooz.org> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Love H÷rnquist +strand <lha [AT] it.su.se> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: Dominic BÚchaz <bdo [AT] zhwin.ch> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Invalid utf8 encoding: RÚmi Denis-Courmont <courmisch [AT] via.ecp.fr> ------ >From module: Gtk Category: Critical Process ID: 3452 Message: file gtktextbuffer.c: line 557 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed ------ Press any key to exit
- Prev by Date: Re: [Ethereal-dev] New pre-release for Win32 users?
- Next by Date: Re: [Ethereal-dev] Custom protocol on top of TCP. (newbie question)
- Previous by thread: [Ethereal-dev] Configurable column based on protocol fields
- Next by thread: [Ethereal-dev] Having a hard time updating renamed Ethereal.desktop to ethereal.desktop file with TortoiseSVN
- Index(es):