首页 > 解决方案 > Django - 突然登录到(运行服务器)控制台

问题描述

我不知道为什么Django开始登录控制台。当我运行djangoserver (in PyCharm) 时,在同一个控制台中有日志条目。

我最近安装了我的 fork,pysendpulse但这可能是巧合。

INFO     [2019-04-08 00:59:05,331]  Initialization SendPulse REST API Class
DEBUG    [2019-04-08 00:59:05,331]  Try to get security token from 'MEMCACHED'
DEBUG    [2019-04-08 00:59:05,331]  Got: 'some string'
INFO     [2019-04-08 00:59:05,775]  Initialization SendPulse REST API Class
DEBUG    [2019-04-08 00:59:05,775]  Try to get security token from 'MEMCACHED'
DEBUG    [2019-04-08 00:59:05,775]  Got: 'some string'
Performing system checks...

System check identified no issues (0 silenced).
DEBUG    [2019-04-08 00:59:06,025]  (0.001) 
            SELECT c.relname, c.relkind
            FROM pg_catalog.pg_class c
            LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
            WHERE c.relkind IN ('r', 'v')
                AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
                AND pg_catalog.pg_table_is_visible(c.oid); args=None
DEBUG    [2019-04-08 00:59:06,026]  (0.000) SELECT "django_migrations"."app", "django_migrations"."name" FROM "django_migrations"; args=()
April 08, 2019 - 00:59:06
Django version 2.1.7, using settings 'p.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

例如,第一行是从这里记录的:

logging.info("Initialization SendPulse REST API Class")

settings.LOGGING

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{asctime} {levelname} {module} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'local_file_debug': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_PATH, 'django_debug.log'),
            'maxBytes': DEFAULT_LOG_SIZE,
            'backupCount': 0,
        },
        'local_file': {
            'level': 'WARNING',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_PATH, 'django.log'),
            'maxBytes': DEFAULT_LOG_SIZE,
            'backupCount': 0,
        },
        'pipedrive': {
            'level': 'DEBUG' if DEBUG else 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_PATH, 'pipedrive.log'),
            'formatter': 'verbose',
            'maxBytes': DEFAULT_LOG_SIZE,
            'backupCount': 0,
        },
    },
    'loggers': {
        'django': {
            'handlers': ['local_file_debug' if DEBUG else 'local_file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'pipedrive': {
            'handlers': ['pipedrive'],
            'level': 'DEBUG',
        },
    },
}

你知道问题可能出在哪里吗?

编辑

shell_plus

打印(记录。根)

<RootLogger root (DEBUG)>

打印(logging.Logger.manager.loggerDict)

{'amqp': <Logger amqp (DEBUG)>, 'kombu.connection': <Logger kombu.connection (DEBUG)>, 'kombu': <logging.PlaceHolder object at 0x7f32045565c0>, 'celery': <Logger celery (DEBUG)>, 'celery.task': <Logger celery.task (DEBUG)>, 'celery.worker': <Logger celery.worker (DEBUG)>, 'kombu.common': <Logger kombu.common (DEBUG)>, 'celery.utils.dispatch.signal': <Logger celery.utils.dispatch.signal (DEBUG)>, 'celery.utils.dispatch': <logging.PlaceHolder object at 0x7f3203609898>, 'celery.utils': <logging.PlaceHolder object at 0x7f3203609978>, 'celery.app.builtins': <Logger celery.app.builtins (DEBUG)>, 'celery.app': <logging.PlaceHolder object at 0x7f32036e6c88>, 'celery.app.base': <Logger celery.app.base (DEBUG)>, 'django.template': <Logger django.template (DEBUG)>, 'django': <Logger django (DEBUG)>, 'concurrent.futures': <Logger concurrent.futures (DEBUG)>, 'concurrent': <logging.PlaceHolder object at 0x7f3203267940>, 'asyncio': <Logger asyncio (DEBUG)>, 'django.db.backends': <Logger django.db.backends (DEBUG)>, 'django.db': <logging.PlaceHolder object at 0x7f3202855668>, 'django.request': <Logger django.request (DEBUG)>, 'django.server': <Logger django.server (DEBUG)>, 'pipedrive': <Logger pipedrive (DEBUG)>, 'django.security.csrf': <Logger django.security.csrf (DEBUG)>, 'django.security': <logging.PlaceHolder object at 0x7f32025823c8>, 'django.db.backends.schema': <Logger django.db.backends.schema (DEBUG)>, 'urllib3.util.retry': <Logger urllib3.util.retry (DEBUG)>, 'urllib3.util': <logging.PlaceHolder object at 0x7f31feafb4e0>, 'urllib3': <Logger urllib3 (DEBUG)>, 'urllib3.connection': <Logger urllib3.connection (DEBUG)>, 'urllib3.response': <Logger urllib3.response (DEBUG)>, 'urllib3.connectionpool': <Logger urllib3.connectionpool (DEBUG)>, 'urllib3.poolmanager': <Logger urllib3.poolmanager (DEBUG)>, 'requests': <Logger requests (DEBUG)>, 'superfakura.api': <Logger superfakura.api (DEBUG)>, 'superfakura': <logging.PlaceHolder object at 0x7f31fe527208>, 'p.apps.apis.superfaktura.utils': <Logger p.apps.apis.superfaktura.utils (DEBUG)>, 'p.apps.apis.superfaktura': <logging.PlaceHolder object at 0x7f31fe51c7b8>, 'p.apps.apis': <logging.PlaceHolder object at 0x7f31fe51c860>, 'p.apps': <logging.PlaceHolder object at 0x7f31fe527470>, 'p': <logging.PlaceHolder object at 0x7f31fe527588>, 'p.apps.apis.superfaktura.models': <Logger p.apps.apis.superfaktura.models (DEBUG)>, 'django_bootstrap_breadcrumbs.templatetags.django_bootstrap_breadcrumbs': <Logger django_bootstrap_breadcrumbs.templatetags.django_bootstrap_breadcrumbs (DEBUG)>, 'django_bootstrap_breadcrumbs.templatetags': <logging.PlaceHolder object at 0x7f31fdece2b0>, 'django_bootstrap_breadcrumbs': <logging.PlaceHolder object at 0x7f31fdece2e8>, 'PIL.Image': <Logger PIL.Image (DEBUG)>, 'PIL': <logging.PlaceHolder object at 0x7f31fdea29e8>, 'prompt_toolkit': <Logger prompt_toolkit (DEBUG)>, 'parso.python.diff': <Logger parso.python.diff (DEBUG)>, 'parso.python': <logging.PlaceHolder object at 0x7f31fc597668>, 'parso': <logging.PlaceHolder object at 0x7f31fc597be0>, 'parso.cache': <Logger parso.cache (DEBUG)>, 'TerminalIPythonApp': <Logger TerminalIPythonApp (WARNING)>}

标签: pythondjangologging

解决方案


我最近安装了我的 fork,pysendpulse但这可能是巧合。

这取决于你如何/在哪里分叉它,这不是巧合。包中的
原始pysendpulse调用。logging.basicConfig__init__.py

logging.basicConfig(format='%(levelname)-8s [%(asctime)s]  %(message)s', level=logging.DEBUG)

的目的basicConfig是建立...

... 通过创建 StreamHandler具有默认值的日志系统Formatter并将其添加到根日志记录器来进行日志记录系统的基本配置。

这是在这里完成的。

由于您将django记录器配置为传播(这是默认设置)

'propagate': True,

日志记录不仅由您的专用记录器处理,而且还向上发送到祖先链,最终由root记录器处理。

如果不导入pysendpulse,则root记录器没有附加处理程序并设置为默认级别WARNING;日志记录“丢失”(在root记录器级别)。
但是对logging.basicConfigin的调用将pysendpulse附加StreamHandler到您的root记录器并将其设置为 level DEBUG,因此您可以在控制台上看到消息。

至于解决方案,您可以禁用django记录器上的传播

'propagate': False,

StreamHandlerroot记录器中删除

logging.getLogger().removeHandler(logging.getLogger().handlers[0])

或者,由于您显然 fork ,请考虑从模块中pysendpulse删除logging.basicConfig调用。__init__.py


推荐阅读