delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

DjangoをEC2インスタンス上で動かす環境を構築する(その6:アプリケーションログを出力する。)

参考文献

その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  525 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  526 00:13 /var/log/django
ログが出力されることの確認

mysite/polls/views.pyIndexViewにテスト用のログを仕込む。

[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  526 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に続く。