DjangoをEC2インスタンス上で動かす環境を構築する(その6:アプリケーションログを出力する。)
概要
参考文献
- 『Pythonプロフェッショナルプログラミング 第3版』の「Chapter 11 環境構築とデプロイの自動化」
- 『現場で使える Django の教科書《実践編》』の「第7章 デプロイ」
その6:アプリケーションログを出力する。
概要
/var/log
配下にDjangoのアプリケーションログを出力するように設定する。
手順
マイグレーションを実行する。
http://localhost:8000/polls/
にアクセスするので、便宜的に「appserver」ユーザーでマイグレーションを実行する。
$ whoami appserver $ python3 manage.py maigrate
Django側のログ出力の設定
・公式ドキュメントは以下
docs.djangoproject.com
・settings.py
にログ出力の設定を追加する。
[settings.py]
LOGGING = { "version": 1, "disable_existing_loggers": False, "formatters": {"simple": {"format": "%(asctime)s [%(levelname)s] %(message)s"}}, "handlers": { "file": { "level": "INFO", "class": "logging.FileHandler", "filename": "/var/log/django/app.log", "formatter": "simple", }, }, "loggers": { "django": {"handlers": ["file"], "level": "INFO", "propagate": False,}, "": {"handlers": ["file"], "level": "INFO", "propagate": False,}, }, }
※検証して気づいたことだが、loggers
にキーが空文字のloggerを設定しないと、自分で書いたログが出力されない。
出力先のディレクトリの作成
・/var/log/django
ディレクトリを作成して、所有者をappserver:appserver
に設定する。
$ ls -ld /var/log drwxr-xr-x 9 root root 4096 5月 25 03:19 /var/log $ sudo mkdir /var/log/django $ sudo chown appserver:appserver /var/log/django $ ls -ld /var/log/django drwxr-xr-x 2 appserver appserver 6 5月 26 00:13 /var/log/django
ログが出力されることの確認
・mysite/polls/views.py
のIndexView
にテスト用のログを仕込む。
[views.py]
import logging # ... logger = logging.getLogger(__name__) # ... def get_queryset(self): """Retern the last five published questions.""" logger.info('Hello world!') # テスト用のログ出力 # ...
・gunicorn
を起動する。
$ sudo systemctl start gunicorn.service
・空のログファイルが作成されていることを確認する。
$ ls -l /var/log/django 合計 0 -rw-r--r-- 1 appserver appserver 0 5月 26 00:18 app.log $
・curlでurlを叩いてみる。
$ curl -I "http://localhost:8000/polls/" HTTP/1.1 200 OK Server: gunicorn/20.0.4 Date: Tue, 26 May 2020 00:45:30 GMT Connection: close Content-Type: text/html; charset=utf-8 X-Frame-Options: DENY Content-Length: 109 X-Content-Type-Options: nosniff
・ログが出力されていることを確認する。
$ cat /var/log/django/app.log 2020-05-26 10:24:49,149 [INFO] Hello world! 2020-05-26 10:25:03,851 [INFO] Hello world! 2020-05-26 10:25:19,327 [INFO] Hello world! $
以上で「その6:アプリケーションログを出力する。」は完了。
その7に続く。