MONGOC_UNSTRUCTURED_LOG(3) libmongoc MONGOC_UNSTRUCTURED_LOG(3)
This is the original logging facility that supports freeform string messages
originating from the driver itself or from application code. This has been
retroactively termed "unstructured logging". See Structured Logging for the
newer standardized logging facility.
typedef enum {
MONGOC_LOG_LEVEL_ERROR,
MONGOC_LOG_LEVEL_CRITICAL,
MONGOC_LOG_LEVEL_WARNING,
MONGOC_LOG_LEVEL_MESSAGE,
MONGOC_LOG_LEVEL_INFO,
MONGOC_LOG_LEVEL_DEBUG,
MONGOC_LOG_LEVEL_TRACE,
} mongoc_log_level_t;
#define MONGOC_ERROR(...)
#define MONGOC_CRITICAL(...)
#define MONGOC_WARNING(...)
#define MONGOC_MESSAGE(...)
#define MONGOC_INFO(...)
#define MONGOC_DEBUG(...)
typedef void (*mongoc_log_func_t) (mongoc_log_level_t log_level,
const char *log_domain,
const char *message,
void *user_data);
void
mongoc_log_set_handler (mongoc_log_func_t log_func, void *user_data);
void
mongoc_log (mongoc_log_level_t log_level,
const char *log_domain,
const char *format,
...);
const char *
mongoc_log_level_str (mongoc_log_level_t log_level);
void
mongoc_log_default_handler (mongoc_log_level_t log_level,
const char *log_domain,
const char *message,
void *user_data);
void
mongoc_log_trace_enable (void);
void
mongoc_log_trace_disable (void);
This abstraction can be used for logging in your application, or you can
integrate the driver with an existing logging system.
MACROS
To make logging a little less painful, various helper macros are provided.
See the following example.
#undef MONGOC_LOG_DOMAIN
#define MONGOC_LOG_DOMAIN "my-custom-domain"
MONGOC_WARNING ("An error occurred: %s", strerror (errno));
CUSTOM LOG HANDLERS
The default log handler prints a timestamp and the log message to stdout,
or to stderr for warnings, critical messages, and errors. You can override
the handler with mongoc_log_set_handler(). Your handler function is called
in a mutex for thread safety.
For example, you could register a custom handler to suppress messages at
INFO level and below:
void
my_logger (mongoc_log_level_t log_level,
const char *log_domain,
const char *message,
void *user_data)
{
/* smaller values are more important */
if (log_level < MONGOC_LOG_LEVEL_INFO) {
mongoc_log_default_handler (log_level, log_domain, message, user_data);
}
}
int
main (int argc, char *argv[])
{
mongoc_log_set_handler (my_logger, NULL);
mongoc_init ();
/* ... your code ... */
mongoc_cleanup ();
return 0;
}
Note that in the example above mongoc_log_set_handler() is called before
mongoc_init(). Otherwise, some log traces could not be processed by the
log handler.
To restore the default handler:
mongoc_log_set_handler (mongoc_log_default_handler, NULL);
DISABLE LOGGING
To disable all logging, including warnings, critical messages and errors,
provide an empty log handler:
mongoc_log_set_handler (NULL, NULL);
TRACING
If compiling your own copy of the MongoDB C driver, consider configuring
with -DENABLE_TRACING=ON to enable function tracing and hex dumps of net-
work packets to STDERR and STDOUT during development and debugging.
This is especially useful when debugging what may be going on internally in
the driver.
Trace messages can be enabled and disabled by calling mongoc_log_trace_en-
able() and mongoc_log_trace_disable()
NOTE:
Compiling the driver with -DENABLE_TRACING=ON will affect its perfor-
mance. Disabling tracing with mongoc_log_trace_disable() significantly
reduces the overhead, but cannot remove it completely.
AUTHOR
MongoDB, Inc
COPYRIGHT
2009-present, MongoDB, Inc.
1.30.8 Aug 27, 2026 MONGOC_UNSTRUCTURED_LOG(3)
MACROS | CUSTOM LOG HANDLERS | DISABLE LOGGING | TRACING | AUTHOR | COPYRIGHT
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=mongoc_unstructured_log&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
