LRN's big logging rewrite (#1805):
authorChristian Grothoff <christian@grothoff.org>
Tue, 4 Oct 2011 11:09:39 +0000 (11:09 +0000)
committerChristian Grothoff <christian@grothoff.org>
Tue, 4 Oct 2011 11:09:39 +0000 (11:09 +0000)
commite305c764722394c18d55e084c7be4b64ff799fa4
tree24f9dd8cc6f5393a9084d8149e53af5e850b25e7
parentba59bf06eefaefa447fbca9059adefe9ac0ef167
LRN's big logging rewrite (#1805):

* GNUNET_BOTTOM_LOGLEVEL and GNUNET_TOP_LOGLEVEL set global levels
Use bottom level to force logging to be more verbose than configured
Use top level to force logging to be less verbose than configured
Obviously, bottom <= top

* GNUNET_LOG sets per-component levels
GNUNET_LOG looks like this:
name[/bottom[/top]]/...
name starts with a non-digit character, must not include '/'
bottom and top must consist only of digits, or be empty
a description is only used if it matches the component exactly
as a special exception (for now) the name '*' matches any component
per-component loglevels override global loglevels
global levels override whatever is given via arguments or in config
Examples:
test_client/8/8/
run test_client with DEBUG level (usually leads to a timeout, by the way)

*/2/2/core/8/8/transport/4/4
run everything with WARNING, core - with DEBUG, transport - with INFO

*//1/peerinfo/4/
run everything with top loglevel ERROR, global/configured bottom loglevel,
and peerinfo - with bottom loglevel INFO and global/configured top loglevel

statistics/
does nothing

* Added GNUNET_ERROR_TYPE_UNSPECIFIED enum value, to hold -1.
  Its corresponding string is NULL.
* Changed the logger calls as Grothoff suggested - to use static int to hold
  the result of runtime evaluation of logability.
  Logging can be unconditionally disabled in advance by defining
  GNUNET_LOG_CALL_STATUS to 0, and enabled in advance by defining it to 1.
* Added GNUNET_CULL_LOGGING, which, if defined, completely culls out all
  logging calls at compile time.
* Log definition parsing is only done once, results are cached.
* Changed definition format, now it looks like this:
  [component|*|];[file|*|];[function|*|];[from_line[-to_line]];level/[component...]
  All field separators are mandatory (but some fields could be empty or be '*').
  Line definition must be either empty or "number" or "number-number"
  Level definition must not be empty, and is a string representation
  of the level (i.e. DEBUG, WARNING, INFO, etc).
  Definition entry must end with a slash, whether or not there's another
  entry after it.
  File name is matched to the end of __FILE__, which allows file name
  to match not only the base name, but also directories leading to it.
* Removed default WARNING loglevel from program and service utility code.
  Now they default to NULL (UNSPECIFIED) level, which can be overriden by
  GNUNET_LOG definition, if no level is specified via config or commandline.
  Log levels from config or commandline are overriden by GNUNET_FORCE_LOG.
  If GNUNET_*LOG are undefined, and no levels came from config or commandline,
  logger internally defaults to WARNING level.

Add --enable-logging configure option
20 files changed:
ChangeLog
configure.ac
po/de.gmo
po/de.po
po/es.gmo
po/es.po
po/gnunet.pot
po/sv.gmo
po/sv.po
po/vi.gmo
po/vi.po
po/zh_CN.po
src/core/gnunet-service-core.c
src/dht/gnunet-service-dht_neighbours.c
src/dht/test_dht_multipeer.c
src/hello/hello.c
src/include/gnunet_common.h
src/util/common_logging.c
src/util/program.c
src/util/service.c