我在我的 Django 应用程序中设置了日志记录以记录到标准输出和文件。
当我正常运行我的 django 应用程序 (./manage.py runserver) 时,日志会按预期更新。这是一个在我访问以下 View 的 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
这是使用全新的 virtualenv 和 Django 2.0 安装,但它应该与旧版本的 Django 完全相同。
