Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ignoring log messages from third party packages in Python

My Python 3 app uses standard logging package. I would like to log all the info level messages from my code, yet make sure logging ignores all the info messages issued by third party packages such as requests.

Invoking Logger.setLevel(lvl) before and after every time I use requests.get should work, but it is very tedious. I guess I could use a decorator, but is there a simpler way?

like image 251
AlexC Avatar asked Jul 06 '26 23:07

AlexC


1 Answers

Loggers can be identified by their dotted module name. You can turn on and off loggers in individual modules if loggers are set up correctly.

Example of advanced logging configuration, having different logging levels for different packages:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,

    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },

        'request_format': {
            'format': '%(levelname)s %(asctime)s %(module)s %(remote_addr)s %(username)s %(request_method)s '
            '%(path_info)s %(server_protocol)s" %(http_user_agent)s '
            '%(message)s',
        },
    },

    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        },

       # Add an unbound RequestFilter.
       'request': {
           '()': 'django_requestlogging.logging_filters.RequestFilter',
       },
    },

    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },

        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
            'stream': sys.stdout
        },

        'rainbow': {
            "level": "DEBUG",
            "class": "rainbow_logging_handler.RainbowLoggingHandler",
            "stream": sys.stderr
        },

        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filters': ['request'],
            'filename': 'logs/django.log',
            'formatter': 'request_format',
        },

        'sentry': {
            'level': 'WARN',
            'class': PRODUCTION and 'raven.contrib.django.raven_compat.handlers.SentryHandler' or 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },

        'django.db.backends': {
            'handlers': [],
            'level': 'ERROR',
            'propagate': True,
        },

        'sqlalchemy': {
            'level': 'ERROR',
            'propagate': False,
        },

        'py.warnings': {
            'level': 'ERROR',
            'propagate': False,
        },

        '': {
            'level': PRODUCTION and 'WARN' or 'DEBUG',
            'handlers': [PRODUCTION and 'sentry' or 'rainbow', 'file'],
        },

    }
}
like image 101
Mikko Ohtamaa Avatar answered Jul 09 '26 15:07

Mikko Ohtamaa



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!