2015-08-22 5 views
5

Очень похоже на lafagundes question about south migration debug logging, за исключением того, что я не использую юг - я использую простые миграции Django 1.7. Я также использую тестовый бегун django-nose.Как отключить ведение журнала отладки миграции django?

Когда я бег 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.db.backends.schema: DEBUG линий, участвующих в Django миграция:

(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 []) 

Что действительно затрудняет возврат к фактическому сбою.

Как отключить этот выход? Либо на уровне джанго или носа?

ответ

4

Если вы не против отключения миграции в тестировании, вы можете сделать это, добавив следующие строки в 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', 
      } 
     } 
    } 
+2

Благодарим, что подход к настройке LOGGING более приятный. Но похоже, что это должен быть вариант в самом джанго? – groovecoder

+0

Я также закончил настройку настроек «LOGGING», в частности, я просто установил 'обработчики'' ['console'] 'и' level' в '' WARNING''. –

2

Чтобы быстро удалить протоколирование сообщений, вы можете работать с:

./manage.py test --nologcapture

Сообщение, захваченные nose logcapture plugin, которая имеет дополнительные опции для тонкой настройки. Однако django-нос имеет old issue, что может помешать вам использовать многие из них из командной строки. Это запланировано на milestone v1.4.2, но это месяц просрочен. Вы можете работать с файлами .noserc или nose.cfg - см. nose docs для формата.

+0

Это работает быстро, но я ** хочу ** захватить другой вывод журнала. Я просто не хочу выводить уровень «DEBUG». – groovecoder

 Смежные вопросы

  • Нет связанных вопросов^_^