Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django日志记录不适用于Django shell_Python_Django_Logging - Fatal编程技术网

Python Django日志记录不适用于Django shell

Python Django日志记录不适用于Django shell,python,django,logging,Python,Django,Logging,我在Django应用程序中设置了日志记录,以便同时登录到标准输出和文件 当我正常运行django应用程序时(/manage.py runserver),日志会按预期更新。以下是我访问以下视图的url时成功登录的示例: # views.py import logging logger = logging.getLogger('mylogger') def test(request): logger.error("test") 但是,当我运行/manage.py shell并运行以下命

我在Django应用程序中设置了日志记录,以便同时登录到标准输出和文件

当我正常运行django应用程序时(
/manage.py runserver
),日志会按预期更新。以下是我访问以下视图的url时成功登录的示例:

# views.py

import logging
logger = logging.getLogger('mylogger')

def test(request):
    logger.error("test")
但是,当我运行
/manage.py shell
并运行以下命令时,日志不会更新:

import logging
logger = logging.getLogger('mylogger')
logger.error('test')
这是我在settings.py中的日志设置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '../debug.log',
        },
    },
    'loggers': {
        'mylogger': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
            'propagate': True,
        },
    }
}

我必须做些额外的事情才能让日志在shell中工作吗?

它在shell中应该可以正常工作。它对我来说是这样的,日志记录配置与您相同(除了我使用了
'ext://sys.stdout'
而不是
sys.stdout
,因为我没有在
settings.py
中导入
sys

django20 vinay@ubuntu:/tmp/foo$ tail -25 foo/settings.py 
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'stream': 'ext://sys.stdout',
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '../debug.log',
        },
    },
    'loggers': {
        'mylogger': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
            'propagate': True,
        },
    }
}

django20 vinay@ubuntu:/tmp/foo$ python manage.py shell
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import logging; logger = logging.getLogger('mylogger')
>>> logger.error('foo')
foo
>>> logger.warning('bar')
bar
>>> logger.info('baz')
baz
>>> logger.debug('boz')
>>> 

django20 vinay@ubuntu:/tmp/foo$ more ../debug.log 
foo
bar
baz

这是在Django 2.0安装中使用了一个新的virtualenv,但它应该与Django的旧版本完全相同。

在Pycharm中使用Django shell时,我遇到了同样的问题。有两种方法可以解决它

  • 启动django shell后,手动导入它:

    导入日志;l=logging.getLogger('django.db.backends');l.setLevel(logging.DEBUG);l.addHandler(logging.StreamHandler())

  • 或者,如果您像我一样使用Pycharm专业版,您可以在控制台启动时添加此导入,您可以在官方文档中看到。 要执行此操作,请转到您的 文件|设置|构建、执行、部署|控制台|适用于Windows和Linux的Django控制台

  • PyCharm |首选项|构建、执行、部署|控制台|适用于macOS的Django控制台


    并在控制台启动时添加此导入命令。

    编辑您的问题,向我们显示使用
    runserver
    时确实有效的日志记录代码,以及
    settings.py
    @JohnGordon中的日志记录设置。我更新了我的问题。您的评论似乎暗示,如果日志记录在runserver中有效,那么它应该在shell中工作,因为您正在尝试正在查看我在哪里配置了错误的设置。你能确认日志记录应该在shell中工作吗?@BUZZY这不是那个问题的重复。我成功地登录到了控制台。如果你通读了这个问题和我的问题,你会看到我正确地配置了
    'loggers'
    dict,其中有一个与我的名字匹配的日志记录程序calling@rawbeans尝试在sys.stderr上更改控制台的处理程序流