Django日志记录不适用于django shell

时间:2018-02-17 00:13:08

标签: python django logging

我在我的Django应用程序中设置日志记录以记录stdout和文件。

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

# 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中工作?

2 个答案:

答案 0 :(得分:1)

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

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完全相同。

答案 1 :(得分:0)

在Pycharm中使用django-shell时,我面临着同样的问题。有两种解决方法。

  1. 启动django-shell时,请手动将其导入:

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

  2. 或者,如果您正在使用像我这样的Pycharm专业版,那么可以在控制台启动时添加此导入,您可以在https://www.jetbrains.com/help/pycharm/console-django-console.html官方文档中看到。 为此,请转到 文件|设置|构建,执行,部署|控制台|适用于Windows和Linux的Django控制台

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

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

相关问题