tracker r1882 - in branches/indexer-split: . src/libtracker-common



Author: mr
Date: Thu Jul 17 09:53:31 2008
New Revision: 1882
URL: http://svn.gnome.org/viewvc/tracker?rev=1882&view=rev

Log:


Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-common/tracker-log.c
   branches/indexer-split/src/libtracker-common/tracker-log.h

Modified: branches/indexer-split/src/libtracker-common/tracker-log.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-log.c	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-log.c	Thu Jul 17 09:53:31 2008
@@ -35,52 +35,33 @@
 
 #include "tracker-log.h"
 
-typedef struct {
-	GMutex   *mutex;
-	gchar    *filename;
-	gint      verbosity;
-	gboolean  abort_on_error;
-} TrackerLog;
-
-static TrackerLog *log = NULL;
-static guint log_handler_id;
+static gboolean  initialized;
+static GMutex   *mutex;
+static FILE     *fd;
+static gint      verbosity;
+static guint     log_handler_id;
 
 static inline void
 log_output (const gchar    *domain,
 	    GLogLevelFlags  log_level,
 	    const gchar    *message)
 {
-	FILE          *fd;
-	time_t         now;
-	gchar          time_str[64];
-	gchar         *output;
-	struct tm     *local_time;
-	GTimeVal       current_time;
-	static gsize   size = 0;
-	const gchar   *log_level_str;
+	time_t        now;
+	gchar         time_str[64];
+	gchar        *output;
+	struct tm    *local_time;
+	GTimeVal      current_time;
+	const gchar  *log_level_str;
+	static gsize  size = 0;
 
-	g_return_if_fail (log != NULL);
+	g_return_if_fail (initialized == TRUE);
 	g_return_if_fail (message != NULL && message[0] != '\0');
 
 	/* Ensure file logging is thread safe */
-	g_mutex_lock (log->mutex);
-
-	fd = g_fopen (log->filename, "a");
-	if (!fd) {
-		const gchar *error_string;
-
-		error_string = g_strerror (errno);
-		g_fprintf (stderr,
-			   "Could not open log:'%s', %s\n", 
-			   log->filename,
-			   error_string);
-		g_mutex_unlock (log->mutex);
-
-		return;
-	}
+	g_mutex_lock (mutex);
 
 	/* Check log size, 10MiB limit */
-	if (size > (10 << 20)) {
+	if (size > (10 << 20) && fd) {
 		rewind (fd);
 		ftruncate (fileno (fd), 0);
 		size = 0;
@@ -117,12 +98,17 @@
 				  log_level_str ? log_level_str : "",
 				  message);
 
-	size += g_fprintf (fd, "%s\n", output);
-	g_free (output);
+	if (G_UNLIKELY (fd == NULL)) {
+		g_fprintf (stderr, "%s\n", output);
+		fflush (stderr);
+	} else {
+		size += g_fprintf (fd, "%s\n", output);
+		fflush (fd);
+	}
 
-	fclose (fd);
+	g_free (output);
 
-	g_mutex_unlock (log->mutex);
+	g_mutex_unlock (mutex);
 }
 
 static void
@@ -131,54 +117,73 @@
 		     const gchar    *message,
 		     gpointer        user_data)
 {
-	if (((log_level & G_LOG_LEVEL_DEBUG) && log->verbosity < 3) ||
-	    ((log_level & G_LOG_LEVEL_INFO) && log->verbosity < 2) ||
-	    ((log_level & G_LOG_LEVEL_MESSAGE) && log->verbosity < 1)) {
+	if (((log_level & G_LOG_LEVEL_DEBUG) && verbosity < 3) ||
+	    ((log_level & G_LOG_LEVEL_INFO) && verbosity < 2) ||
+	    ((log_level & G_LOG_LEVEL_MESSAGE) && verbosity < 1)) {
 		return;
 	}
 
 	log_output (domain, log_level, message);
 
-	/* now show the message through stdout/stderr as usual */
+	/* Now show the message through stdout/stderr as usual */
 	g_log_default_handler (domain, log_level, message, user_data);
 }
 
-void
+gboolean
 tracker_log_init (const gchar *filename,
-		  gint         verbosity)
+		  gint         this_verbosity)
 {
-	g_return_if_fail (filename != NULL);
+	g_return_val_if_fail (filename != NULL, FALSE);
 
-	if (log != NULL) {
-		g_warning ("Log already initialized");
-		return;
+	if (initialized) {
+		return TRUE;
 	}
 
-	log = g_new0 (TrackerLog, 1);
-	log->filename = g_strdup (filename);
-	log->mutex = g_mutex_new ();
-	log->verbosity = verbosity;
+	/* Open file */
+	fd = g_fopen (filename, "a");
+	if (!fd) {
+		const gchar *error_string;
+
+		error_string = g_strerror (errno);
+		g_fprintf (stderr,
+			   "Could not open log:'%s', %s\n", 
+			   filename,
+			   error_string);
+		g_fprintf (stderr,
+			   "All logging will go to stderr\n");
+	}
+
+	verbosity = this_verbosity;
+	mutex = g_mutex_new ();
 
+	/* Add log handler function */
 	log_handler_id = g_log_set_handler (NULL, 
 					    G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL,
 					    tracker_log_handler, 
-					    log);
+					    NULL);
+
+	g_log_set_default_handler (tracker_log_handler, NULL);
+
+	initialized = TRUE;
 
-	g_log_set_default_handler (tracker_log_handler, log);
+	return TRUE;
 }
 
 void
 tracker_log_shutdown (void) 
 {
-	g_return_if_fail (log != NULL);
+	if (!initialized) {
+		return;
+	}
+
+	if (fd) {
+		fclose (fd);
+	}
 
 	g_log_remove_handler (NULL, log_handler_id);
 	log_handler_id = 0;
 
-	g_mutex_free (log->mutex);
-	g_free (log->filename);
-	g_free (log);
+	g_mutex_free (mutex);
 
-	/* Reset the log pointer so we can re-initialize if we want */
-	log = NULL;
+	initialized = FALSE;
 }

Modified: branches/indexer-split/src/libtracker-common/tracker-log.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-log.h	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-log.h	Thu Jul 17 09:53:31 2008
@@ -26,9 +26,9 @@
 
 G_BEGIN_DECLS
 
-void     tracker_log_init               (const char *filename,
-					 gint        verbosity);
-void     tracker_log_shutdown           (void);
+gboolean tracker_log_init     (const char *filename,
+			       gint        verbosity);
+void     tracker_log_shutdown (void);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]