altairbow / django-db-connection-pool

Database connection pool component library for Django
https://pypi.python.org/pypi/django-db-connection-pool/
MIT License
181 stars 24 forks source link

您好,麻烦请问下这个Django链接池的包怎么设置日志等级啊? #12

Closed sonion028 closed 3 years ago

sonion028 commented 3 years ago

您好: 首先感谢您的劳动和分享精神。作为一个刚入门或者说还没入门的小白,用您的Django链接池的包确实解决了实际问题。

其次,想请问您,这个包的日志等级怎么设置的?我Django项目的日志设置的是debug。用了您写的这个链接池的包后,日志里会生成如下日志: 2020-11-15 17:33:21,750 INFO sqlalchemy.pool.impl.QueuePool Connection <pymysql.connections.Connection object at 0x7f7d6ec319e8> exceeded timeout; recycling

而且还挺多的。虽然不影响使用,但每次看日志的时候还是会影响查看效率。想说咱这个链接池的包怎么能只输出warning和debug级别的日志。

感谢您,望回复。

altairbow commented 3 years ago

日志记录与django-db-connection-pool无关,可以通过配置对应的logger来调整日志的输出,例如你可以新增一个logger:"sqlalchemy.pool": { "handlers": [

此处指向你的日志 handler

    "database",
  ],
  "level": "INFO",
  "propagate": false
}
sonion028 commented 3 years ago

您好: 是有日志是有设置的。但是现在是不知道这个日志设置不知道是设置到哪里。

在Django项目里设置试过,并没有效果。如下:

LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/home/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, 'sqlalchemy.pool':{ 'handlers': ['file'], "level":"INFO", "propagate":False } }, }

所以想问是设置到Django项目里、还是sqlalchemy里还是django-db-connection-pool里?

刚入门,小白问题麻烦您说清楚点,非常感谢。

altairbow commented 3 years ago

这是 python logging 日志级别的定义

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

跳过 INFO 级别只想输出 WARNING 和 DEBUG ,逻辑上是有问题的

另外,如果想屏蔽 sqlalchemy 的 console 日志输出,可以在调用 dj_db_conn_pool.setup 时,传递 echo=False 来屏蔽 sqlalchemy 的 console 输出

sonion028 commented 3 years ago

不好意思,说错了。应该是不输出INFO级别以下的,输出WARNING 、ERROR这些应该是没问题吧?之前说成了单跳过INFO。 如果只输出WARNING 及以上级别的日志该怎么设置呢?设置在哪里呢?求教。

还有您说:“如果想屏蔽 sqlalchemy 的 console 日志输出,可以在调用 dj_db_conn_pool.setup 时,传递 echo=False 来屏蔽 sqlalchemy 的 console 输出” 这里的调用指哪一步啊?您的包只有将数据库的配置改改成这个啊:

MySQL change django.db.backends.mysql to dj_db_conn_pool.backends.mysql:

DATABASES = { 'default': { ... 'ENGINE': 'dj_db_conn_pool.backends.mysql' ... } }

所以您指的调用时时加参数,是指改包代码中的调用?

再次感谢您耐心的解答,小白基础比较差望勿介意。谢谢

altairbow commented 3 years ago

不客气。

如果只想输出 WARNING 及以上,应该将级别设置成 WARNING:


LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/home/debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'sqlalchemy.pool': {
            'handlers': ['file'],
            # 这里需要修改日志级别
            'level': 'WARNING',
            'propagate': False
        }
    },
}

屏蔽 sqlalchemy 的 console 日志输出,可以在你的项目 settings 或者顶级 __init__.py 中添加调用 dj_db_conn_pool.setup(echo=False) 来实现,这个调用必须在 django 获取数据库连接前。

sonion028 commented 3 years ago

sorry,又来打扰你了。 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/home/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, 'sqlalchemy.pool': { 'handlers': ['file'],

这里需要修改日志级别

        'level': 'WARNING',
        'propagate': False
    }
},

}

并没有什么用,反而还报错了。 项目 settings 中添加调用 dj_db_conn_pool.setup(echo=False)也报错,数据库链接就出错了。

麻烦您帮帮忙看看只显示WARNING以上的日志怎么设置。 非常感谢

altairbow commented 3 years ago

建议查阅python官方文档:https://docs.python.org/zh-cn/3.6/tutorial/stdlib2.html#logging