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?
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'],
},
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With