*/
#include "platform.h"
#include "gnunet_crypto_lib.h"
+#include "gnunet_disk_lib.h"
#include "gnunet_strings_lib.h"
#include <regex.h>
return GNUNET_ERROR_TYPE_DEBUG;
if (0 == strcasecmp (log, _("INFO")))
return GNUNET_ERROR_TYPE_INFO;
+ if (0 == strcasecmp (log, _("MESSAGE")))
+ return GNUNET_ERROR_TYPE_MESSAGE;
if (0 == strcasecmp (log, _("WARNING")))
return GNUNET_ERROR_TYPE_WARNING;
if (0 == strcasecmp (log, _("ERROR")))
}
+#if ! TALER_WALLET_ONLY
/**
* Rotate logs, deleting the oldest log.
*
return GNUNET_OK; /* no change */
log_rotate (last_fn);
strcpy (last_fn, fn);
+ if (GNUNET_SYSERR ==
+ GNUNET_DISK_directory_create_for_file (fn))
+ {
+ fprintf (stderr,
+ "Failed to create directory for `%s': %s\n",
+ fn,
+ STRERROR (errno));
+ return GNUNET_SYSERR;
+ }
#if WINDOWS
altlog_fd = OPEN (fn, O_APPEND |
O_BINARY |
GNUNET_stderr = altlog;
return GNUNET_OK;
}
+#endif
/**
if (min_level >= 0)
return caller_level <= min_level;
/* All programs/services previously defaulted to WARNING.
- * Now WE default to WARNING, and THEY default to NULL.
+ * Now *we* default to WARNING, and THEY default to NULL.
+ * Or rather we default to MESSAGE, since things aren't always bad.
*/
- return caller_level <= GNUNET_ERROR_TYPE_WARNING;
+ return caller_level <= GNUNET_ERROR_TYPE_MESSAGE;
}
const char *logfile)
{
const char *env_logfile;
- const struct tm *tm;
- time_t t;
min_level = get_type (loglevel);
#if !defined(GNUNET_CULL_LOGGING)
log_file_name = GNUNET_STRINGS_filename_expand (logfile);
if (NULL == log_file_name)
return GNUNET_SYSERR;
- t = time (NULL);
- tm = gmtime (&t);
- return setup_log_file (tm);
+#if TALER_WALLET_ONLY
+ /* log file option not allowed for wallet logic */
+ GNUNET_assert (NULL == logfile);
+ return GNUNET_OK;
+#else
+ {
+ time_t t;
+ const struct tm *tm;
+
+ t = time (NULL);
+ tm = gmtime (&t);
+ return setup_log_file (tm);
+ }
+#endif
}
if ( (NULL != GNUNET_stderr) &&
(NULL == loggers) )
{
- FPRINTF (GNUNET_stderr,
+ if (kind == GNUNET_ERROR_TYPE_MESSAGE) {
+ /* The idea here is to produce "normal" output messages
+ * for end users while still having the power of the
+ * logging engine for developer needs. So ideally this
+ * is what it should look like when CLI tools are used
+ * interactively, yet the same message shouldn't look
+ * this way if the output is going to logfiles or robots
+ * instead. Is this the right place to do this? --lynX
+ */
+ FPRINTF (GNUNET_stderr,
+ "* %s",
+ msg);
+ } else {
+ FPRINTF (GNUNET_stderr,
"%s %s %s %s",
datestr,
comp,
GNUNET_error_type_to_string (kind),
msg);
+ }
fflush (GNUNET_stderr);
}
pos = loggers;
char *last;
const char *ft;
- if ((0 == last_bulk_time.abs_value_us) || (0 == last_bulk_repeat))
+ if ( (0 == last_bulk_time.abs_value_us) ||
+ (0 == last_bulk_repeat) )
return;
rev = 0;
last = memchr (last_bulk, '\0', BULK_TRACK_SIZE);
va_list vacp;
va_copy (vacp, va);
- size = VSNPRINTF (NULL, 0, message, vacp) + 1;
+ size = VSNPRINTF (NULL,
+ 0,
+ message,
+ vacp) + 1;
GNUNET_assert (0 != size);
va_end (vacp);
- memset (date, 0, DATE_STR_SIZE);
+ memset (date,
+ 0,
+ DATE_STR_SIZE);
{
char buf[size];
long long offset;
}
else
{
- strftime (date2, DATE_STR_SIZE, "%b %d %H:%M:%S-%%020llu", tmptr);
- snprintf (date, sizeof (date), date2,
+ strftime (date2,
+ DATE_STR_SIZE,
+ "%b %d %H:%M:%S-%%020llu",
+ tmptr);
+ snprintf (date,
+ sizeof (date),
+ date2,
(long long) (pc.QuadPart /
(performance_frequency.QuadPart / 1000)));
}
tmptr = localtime (&timeofday.tv_sec);
if (NULL == tmptr)
{
- strcpy (date, "localtime error");
+ strcpy (date,
+ "localtime error");
}
else
{
- strftime (date2, DATE_STR_SIZE, "%b %d %H:%M:%S-%%06u", tmptr);
- snprintf (date, sizeof (date), date2, timeofday.tv_usec);
+ strftime (date2,
+ DATE_STR_SIZE,
+ "%b %d %H:%M:%S-%%06u",
+ tmptr);
+ snprintf (date,
+ sizeof (date),
+ date2,
+ timeofday.tv_usec);
}
#endif
VSNPRINTF (buf, size, message, va);
+#if ! TALER_WALLET_ONLY
if (NULL != tmptr)
(void) setup_log_file (tmptr);
+#endif
if ((0 != (kind & GNUNET_ERROR_TYPE_BULK)) &&
(0 != last_bulk_time.abs_value_us) &&
(0 == strncmp (buf, last_bulk, sizeof (last_bulk))))
return;
}
flush_bulk (date);
- strncpy (last_bulk, buf, sizeof (last_bulk));
+ strncpy (last_bulk,
+ buf,
+ sizeof (last_bulk));
last_bulk_repeat = 0;
last_bulk_kind = kind;
last_bulk_time = GNUNET_TIME_absolute_get ();
- strncpy (last_bulk_comp, comp, COMP_TRACK_SIZE);
- output_message (kind, comp, date, buf);
+ strncpy (last_bulk_comp,
+ comp,
+ COMP_TRACK_SIZE);
+ output_message (kind,
+ comp,
+ date,
+ buf);
}
}
return _("ERROR");
if ((kind & GNUNET_ERROR_TYPE_WARNING) > 0)
return _("WARNING");
+ if ((kind & GNUNET_ERROR_TYPE_MESSAGE) > 0)
+ return _("MESSAGE");
if ((kind & GNUNET_ERROR_TYPE_INFO) > 0)
return _("INFO");
if ((kind & GNUNET_ERROR_TYPE_DEBUG) > 0)