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