Skip to content

Logging#

libaes70 contains simple printf-style macro for emitting log messages. The default implementation emits these messages to stderr using fprintf. This default implementation can be replaced by defining the macro AES70_PRINTF before including library headers. See examples/custom_logging for an example.

The library defines these logging levels:

Name Level
ERROR 1
WARNING 2
INFO 3
TRACE 4

Logging can be enabled by setting the preprocessor symbol AES70_LOG_LEVEL, e.g. passing -DAES70_LOG_LEVEL=2 would enable both ERROR and WARNING levels.

Usage#

Log messages can be generated using the macros

  • AES70_LOG_ERROR(fmt, ...)
  • AES70_LOG_WARNING(fmt, ...)
  • AES70_LOG_INFO(fmt, ...)
  • AES70_LOG_TRACE(fmt, ...)

If the corresponding logging level is enabled, the following defines are set.

  • AES70_LOG_ERROR_ENABLED
  • AES70_LOG_WARNING_ENABLED
  • AES70_LOG_INFO_ENABLED
  • AES70_LOG_TRACE_ENABLED

Interpretation#

The above log levels can be interpreted a follows:

  1. ERROR: These events should not occur in a production system. This can mean that there are bugs or that an API has been used incorrectly.

  2. WARNING: These events should not occur in a production system under normal operation. However, these warnings may happen in situations in which e.g. another network endpoint misbehaves. These messages are helpful during development.

  3. INFO: These events will regularly occur in a production system. They can help understand what happens under the hood and may be helpful during development and testing.

  4. TRACE: These events occur all the time. They can be useful when debugging problems in order to help understand under which circumstances a given problem occurs.

What log level to use#

If the overhead of having logging enabled is acceptable for production builds, it is recommended to run with either ERROR or WARNING. WARNING messages can be triggered by misbehaving clients, so it could be useful when investigating system instabilities later.

INFO and TRACE are only recommended for development builds or during testing.