如何禁用 django 迁移调试日志记录?
How do I disable django migration debug logging?
非常类似于 lafagundes question about south migration debug logging, except I'm not using south - I'm using plain Django 1.7 migrations. I'm also using django-nose 测试 运行ner.
当我运行manage.py test
时,没有捕捉到调试日志输出:
(codesy)lcrouch:codesy lcrouch$ ./manage.py test
nosetests --verbosity=1
Creating test database for alias 'default'...
......E...............................
======================================================================
ERROR: test_return_state (auctions.tests.utils_tests.IssueStateTest)
----------------------------------------------------------------------
当我 运行 一个单独的测试模块时,例如 ./manage.py test auctions.tests.utils_tests
,调试日志输出包括 Django 迁移中涉及的所有 django.db.backends.schema: DEBUG
行:
(codesy)lcrouch:codesy lcrouch$ ./manage.py test auctions.tests.utils_tests
nosetests auctions.tests.utils_tests --verbosity=1
Creating test database for alias 'default'...
E
======================================================================
ERROR: test_return_state (auctions.tests.utils_tests.IssueStateTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/lcrouch/code/codesy/codesy/auctions/tests/utils_tests.py", line 13, in test_return_state
fake_gh_client = fudge.Fake(github_client).returns_fake().provides('get_repo').returns_fake().provides('get_issue').returns_fake().has_attr(state='open')
File "/Users/lcrouch/python/codesy/lib/python2.7/site-packages/fudge/__init__.py", line 1133, in returns_fake
exp = self._get_current_call()
File "/Users/lcrouch/python/codesy/lib/python2.7/site-packages/fudge/__init__.py", line 765, in _get_current_call
"Call to a method that expects a predefined call but no such call exists. "
FakeDeclarationError: Call to a method that expects a predefined call but no such call exists. Maybe you forgot expects('method') or provides('method') ?
-------------------- >> begin captured logging << --------------------
django.db.backends.schema: DEBUG: CREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL); (params [])
django.db.backends.schema: DEBUG: CREATE TABLE "django_content_type" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(100) NOT NULL, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL); (params [])
django.db.backends.schema: DEBUG: CREATE TABLE "django_content_type__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(100) NOT NULL, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL, UNIQUE ("app_label", "model")); (params [])
...
django.db.backends.schema: DEBUG: DROP TABLE "socialaccount_socialapp"; (params [])
django.db.backends.schema: DEBUG: ALTER TABLE "socialaccount_socialapp__new" RENAME TO "socialaccount_socialapp"; (params [])
这真的很难回到真正的失败。
如何禁用此输出?在 django 或鼻子水平?
如果您不介意在测试中禁用迁移,可以通过将以下内容添加到您的 settings.py:
TESTING = 'test' in sys.argv
if TESTING:
class DisableMigrations(object):
def __contains__(self, item):
return True
def __getitem__(self, item):
return "notmigrations"
MIGRATION_MODULES = DisableMigrations()
这只会一次性创建数据库,而不是逐步完成每个迁移。
如果您想在测试中保留迁移 运行,您可以通过更新日志记录设置来删除消息。
TESTING = 'test' in sys.argv
if TESTING:
LOGGING = {
'version': 1,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/codesy-debug.log',
},
},
'loggers': {
'django.db.backends.schema': {
'handlers': ['file'],
'propagate': True,
'level': 'INFO',
},
'': {
'handlers': ['file'],
'level': 'DEBUG',
}
}
}
要快速删除日志消息,您可以运行使用:
./manage.py test --nologcapture
nose logcapture plugin, which has additional options for fine tuning. However, django-nose has an old issue that may prevent you from using many of those from the command line. It's scheduled for milestone v1.4.2, but that's a month overdue. You may be able to work around those with .noserc
or nose.cfg
file - see nose docs 格式正在捕获消息。
非常类似于 lafagundes question about south migration debug logging, except I'm not using south - I'm using plain Django 1.7 migrations. I'm also using django-nose 测试 运行ner.
当我运行manage.py test
时,没有捕捉到调试日志输出:
(codesy)lcrouch:codesy lcrouch$ ./manage.py test
nosetests --verbosity=1
Creating test database for alias 'default'...
......E...............................
======================================================================
ERROR: test_return_state (auctions.tests.utils_tests.IssueStateTest)
----------------------------------------------------------------------
当我 运行 一个单独的测试模块时,例如 ./manage.py test auctions.tests.utils_tests
,调试日志输出包括 Django 迁移中涉及的所有 django.db.backends.schema: DEBUG
行:
(codesy)lcrouch:codesy lcrouch$ ./manage.py test auctions.tests.utils_tests
nosetests auctions.tests.utils_tests --verbosity=1
Creating test database for alias 'default'...
E
======================================================================
ERROR: test_return_state (auctions.tests.utils_tests.IssueStateTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/lcrouch/code/codesy/codesy/auctions/tests/utils_tests.py", line 13, in test_return_state
fake_gh_client = fudge.Fake(github_client).returns_fake().provides('get_repo').returns_fake().provides('get_issue').returns_fake().has_attr(state='open')
File "/Users/lcrouch/python/codesy/lib/python2.7/site-packages/fudge/__init__.py", line 1133, in returns_fake
exp = self._get_current_call()
File "/Users/lcrouch/python/codesy/lib/python2.7/site-packages/fudge/__init__.py", line 765, in _get_current_call
"Call to a method that expects a predefined call but no such call exists. "
FakeDeclarationError: Call to a method that expects a predefined call but no such call exists. Maybe you forgot expects('method') or provides('method') ?
-------------------- >> begin captured logging << --------------------
django.db.backends.schema: DEBUG: CREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL); (params [])
django.db.backends.schema: DEBUG: CREATE TABLE "django_content_type" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(100) NOT NULL, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL); (params [])
django.db.backends.schema: DEBUG: CREATE TABLE "django_content_type__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(100) NOT NULL, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL, UNIQUE ("app_label", "model")); (params [])
...
django.db.backends.schema: DEBUG: DROP TABLE "socialaccount_socialapp"; (params [])
django.db.backends.schema: DEBUG: ALTER TABLE "socialaccount_socialapp__new" RENAME TO "socialaccount_socialapp"; (params [])
这真的很难回到真正的失败。
如何禁用此输出?在 django 或鼻子水平?
如果您不介意在测试中禁用迁移,可以通过将以下内容添加到您的 settings.py:
TESTING = 'test' in sys.argv
if TESTING:
class DisableMigrations(object):
def __contains__(self, item):
return True
def __getitem__(self, item):
return "notmigrations"
MIGRATION_MODULES = DisableMigrations()
这只会一次性创建数据库,而不是逐步完成每个迁移。
如果您想在测试中保留迁移 运行,您可以通过更新日志记录设置来删除消息。
TESTING = 'test' in sys.argv
if TESTING:
LOGGING = {
'version': 1,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/codesy-debug.log',
},
},
'loggers': {
'django.db.backends.schema': {
'handlers': ['file'],
'propagate': True,
'level': 'INFO',
},
'': {
'handlers': ['file'],
'level': 'DEBUG',
}
}
}
要快速删除日志消息,您可以运行使用:
./manage.py test --nologcapture
nose logcapture plugin, which has additional options for fine tuning. However, django-nose has an old issue that may prevent you from using many of those from the command line. It's scheduled for milestone v1.4.2, but that's a month overdue. You may be able to work around those with .noserc
or nose.cfg
file - see nose docs 格式正在捕获消息。