Django を runserver で ローカル起動している際に、ログが出ず、出すのに調べた結果を記載します。
前提
環境情報は以下の通りです。
-
OS
sw_vers ----------------------- ProductName: Mac OS X ProductVersion: 10.12.5 BuildVersion: 16F73 -----------------------
-
python version
python3 -V ----------------------- Python 3.5.1 -----------------------
-
Django Version
pip3 list | grep Django ----------------------- Django (1.10.7) -----------------------
コンソールにデバッグレベルでログを出力する
以下を参考に、 Python/Django: log to console under runserver, log to file under Apache - Stack Overflow
settings.py に以下の設定を追記しました。
LOGGING = {
'version': 1,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
}
}
ロガーの handler
を console
にして出力します。
python manage.py runserver –traceback を使う
django-admin.py と manage.py — Django v1.0 documentation
にかいてありますが、
--traceback
をつけて サーバー起動すると、
例外が送出された場合にスタックトレースを出力してくれます。
settings.py のロガー定義、python manage.py runserver --traceback
を双方設定してサーバーを起動するようにしました。
コンソールログをファイルにも出力する
tee
コマンドを使用して、ファイルとコンソール両方にログを書き出します。
以下、記事が参考になりました。
逆引きUNIXコマンド/teeコマンドでstderr(標準エラー)も対象にする - Linuxと過ごす
python manage.py runserver 2>&1 | tee django.log
標準エラーも対象にteeコマンドの入力とするのは、django のコンソールログのデフォルト出力先が、,標準エラーになっているためです。
django の ロガーの設定で標準出力に変更することもできます。
過去に変更方法を記載していますので、そちらもご確認ください。
djangoのsettings.py内で、LogHandler StreamHandlerのログ出力先を指定する | Monotalk
以上です。
コメント