简体   繁体   English

忽略来自Python中第三方软件包的日志消息

[英]Ignoring log messages from third party packages in Python

My Python 3 app uses standard logging package. 我的Python 3应用程序使用标准的日志记录程序包。 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. 每次我使用requests.get之前和之后调用Logger.setLevel(lvl)应该可以,但是这很繁琐。 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'],
        },

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM