Djangoに限ったことではないのですが、PythonのloggingでrootのハンドラをDEBUGにしていると、IPythonの補完を実行した際にparsoという依存ライブラリのログが出てしまい、カーソル位置がずれてしまうことあります。
例えば、Djangoで以下のように settings.py
でロギングの設定をした場合。
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'root': { 'handlers': ['console'], 'level': 'DEBUG', } }
Djangoの manage.py shell
では、IPythonがインストールされていると、IPythonが起動します。この設定で補完機能を使おうとTabキーを押したとき、次のようにログが出力されてカーソル位置がずれます。
parsoというモジュール(ipython → jedi → parsoの依存)がデバッグログを出力するのですが、これでは補完がまともに使えなくなってしまいます。
parsoのログをINFOレベルに設定することで、回避できます。(もしくは disable_existing_loggers
やrootロガーの設定変更で回避することもできます)
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'parso': { 'handlers': ['console'], 'level': 'INFO', 'propagate': False, }, }, 'root': { 'handlers': ['console'], 'level': 'DEBUG', } }