No subject


Mon Oct 6 17:12:00 PDT 2008


-number of TX/RX messages per service
-number of resent/dropped messages, etc...

Any other ideas?

Regards
Angus

diff --git a/exec/logsys.c b/exec/logsys.c
index c919d6f..14e0cf8 100644
--- a/exec/logsys.c
+++ b/exec/logsys.c
@@ -86,12 +86,21 @@ struct logsys_logger logsys_loggers[MAX_LOGGERS];
=20
 int logsys_single_id =3D 0;
=20
+#define MAX_LOG_LENGTH 128
+
+#ifndef MAX_BLACKBOX_LOGS
+#define MAX_BLACKBOX_LOGS 1024
+#endif /* MAX_BLACKBOX_LOG */
+
+static int blackbox_pos =3D 0;
+static char blackbox[MAX_BLACKBOX_LOGS][MAX_LOG_LENGTH];
+
=20
 struct log_entry {
 	char *file;
 	int line;
 	int priority;
-	char str[128];
+	char str[MAX_LOG_LENGTH];
 	struct log_entry *next;
 };
=20
@@ -402,6 +411,46 @@ drop_log_msg:
 	}
 }
=20
+/*
+ * save the log to the blackbox
+ */
+static void _blackbox_printf (
+	enum logsys_config_mutex_state config_mutex_state,
+	char *file,
+	int line,
+	char *format,
+	va_list ap)
+{
+	char *p =3D NULL;
+	char newfmt[MAX_LOG_LENGTH];
+
+	if (config_mutex_state =3D=3D LOGSYS_CONFIG_MUTEX_UNLOCKED) {
+		pthread_mutex_lock (&logsys_config_mutex);
+	}
+	pthread_mutex_lock (&logsys_new_log_mutex);
+
+	p =3D strrchr(file, '/');
+	if (p)=20
+		file =3D ++p;
+
+	snprintf (newfmt, MAX_LOG_LENGTH, "[%s:%04u] %s", file, line, =
format);
+	vsnprintf (&blackbox[blackbox_pos], MAX_LOG_LENGTH, newfmt, ap);
+
+	if (blackbox_pos >=3D (MAX_BLACKBOX_LOGS - 1)) {
+		blackbox_pos =3D 0;
+	} else {
+		blackbox_pos++;
+	}
+	sprintf(&blackbox[blackbox_pos], "*** END OF BLACK BOX ***");
+
+	pthread_mutex_unlock (&logsys_new_log_mutex);
+	if (config_mutex_state =3D=3D LOGSYS_CONFIG_MUTEX_UNLOCKED) {
+		pthread_mutex_unlock (&logsys_config_mutex);
+	}
+	return;
+
+}
+
 unsigned int _logsys_subsys_create (
 	const char *subsys,
 	unsigned int priority)
@@ -532,6 +581,10 @@ void logsys_log_printf (
=20
 	assert (id < MAX_LOGGERS);
=20
+	va_start (ap, format);
+	_blackbox_printf (LOGSYS_CONFIG_MUTEX_UNLOCKED, file, line, =
format, ap);
+	va_end(ap);
+=09
 	if (LOG_LEVEL(priority) > logsys_loggers[id].priority) {
 		return;
 	}
@@ -555,6 +608,10 @@ static void logsys_log_printf_locked (
=20
 	assert (id < MAX_LOGGERS);
=20
+	va_start (ap, format);
+	_blackbox_printf (LOGSYS_CONFIG_MUTEX_LOCKED, file, line, format, =
ap);
+	va_end(ap);
+
 	if (LOG_LEVEL(priority) > logsys_loggers[id].priority) {
 		return;
 	}
@@ -577,6 +634,7 @@ void _logsys_log_printf2 (
 	assert (id < MAX_LOGGERS);
=20
 	va_start (ap, format);
+	_blackbox_printf (LOGSYS_CONFIG_MUTEX_UNLOCKED, file, line, =
format, ap);
 	_log_printf (LOGSYS_CONFIG_MUTEX_UNLOCKED, file, line, priority, =
id,
 		format, ap);
 	va_end(ap);
@@ -584,13 +642,16 @@ void _logsys_log_printf2 (
=20
 void _logsys_trace (char *file, int line, int tag, int id, char *format, =
...)
 {
+	va_list ap;
 	assert (id < MAX_LOGGERS);
=20
 	pthread_mutex_lock (&logsys_config_mutex);
=20
-	if (tag & logsys_loggers[id].tags) {
-		va_list ap;
+	va_start (ap, format);
+	_blackbox_printf (LOGSYS_CONFIG_MUTEX_LOCKED, file, line, format, =
ap);
+	va_end(ap);
=20
+	if (tag & logsys_loggers[id].tags) {
 		va_start (ap, format);
 		_log_printf (LOGSYS_CONFIG_MUTEX_LOCKED, file, line,
 			LOG_LEVEL_DEBUG, id, format, ap);



More information about the Openais mailing list