# Logging

## MongoDB C driver Logging Abstraction

## Synopsis

    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,
                                            ...) BSON_GNUC_PRINTF(3, 4);
    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);

The MongoDB C driver comes with an abstraction for logging that you can use in your application, or integrate with an existing logging system. To integrate with an existing logging system use mongoc_log_set_handler() and provide a callback that will log to your external 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

To integrate with external logging systems, the MongoDB C driver allows for a custom log handler that can receive formatted log messages. By providing a mongoc_log_func_t to mongoc_log_set_handler() you will be called each time a new log message is received. This function is called within a mutex to ensure reduce potential thread-safety issues.

To reset to the default log handler, pass mongoc_log_default_handler to mongoc_log_set_handler() with NULL for user_data.