python - 在 Python 中忽略来自第三方包的日志消息

标签 python python-3.x logging

我的 Python 3 应用程序使用标准日志记录包。我想记录我的代码中的所有信息级消息,但要确保记录忽略第三方包(如请求)发出的所有信息消息。

每次使用 requests.get 之前和之后调用 Logger.setLevel(lvl) 应该可以,但是非常乏味。我想我可以使用装饰器,但有更简单的方法吗?

最佳答案

记录器可以通过它们的点模块名称来识别。如果 loggers are set up correctly,您可以在各个模块中打开和关闭记录器.

高级日志配置示例,不同包具有不同的日志级别:

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'],
        },

    }
}

关于python - 在 Python 中忽略来自第三方包的日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31838187/

相关文章:

logging - Grafana Loki 特定日志消息总数

logging - 在zope服务器中读取最近的日志条目

python - 窗体的干净方法没有被调用

python - 在 Django 中访问同一数据库中的其他表

javascript - reactjs 客户端和 flask-socketio 服务器之间的 WebSocket 连接未打开

multithreading - Python 3.5 asyncio 从不同线程中的同步代码在事件循环上执行协程

python - 发送/接收 Python 聊天室不工作(更新)

c# - C# 库的可选日志记录依赖项?

Python - 用户生成的字典名称和输入

Python3时间戳到unix时间(有时是毫秒)