LoginSignup
11
9

More than 5 years have passed since last update.

Python3+Django+loggingアレコレ

Last updated at Posted at 2016-11-10

参考:
http://qiita.com/sakamossan/items/a98b949738028ad39a6b
http://docs.python.jp/3.5/library/logging.handlers.html

バージョン

$ python3 --version
Python 3.5.2
$ django-admin --version
1.10.3

書き方

settings.py

$ cd test_project
$ cat test_project/settings.py

# Logging
LOGGING_PATH = '/tmp/'

LOGGING = {
    'version': 1,
    'formatters': {
        'all': {
            'format': '\t'.join([
                "time:%(asctime)s",
                "level:%(levelname)s",
                "module:%(module)s",
                "process:%(process)d",
                "thread:%(thread)d",
                "message:%(message)s",
            ])
        },
    },
    'handlers': {
        'file_no_rotation': { # ローテーションなし
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(LOGGING_PATH, 'file_no_rotation.log'),
            'formatter': 'all',
        },
        'file_size_rotation': { # サイズローテート
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOGGING_PATH, 'file_size_rotation.log'),
            'formatter': 'all',
            'maxBytes': 1024 * 1024,
            'backupCount': 10,
        },
        'file_time_rotation': { # 時刻ローテート
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': os.path.join(LOGGING_PATH, 'file_time_rotation.log'),
            'formatter': 'all',
            'when': 'D',
            'interval': 1,
            'backupCount': 30,
        },
        'console': { # 標準出力
            'level': 'DEBUG',
            'class': 'logging.StreamHandler', 
            'formatter': 'all',
    },
    'loggers': {
        'test_1': {
            'handlers': ['file_no_rotation'],
            'level': 'INFO',
        },
                'test_2': {
            'handlers': ['file_size_rotation'],
            'level': 'INFO',
        },
                'test_3': {
            'handlers': ['file_time_rotation'],
            'level': 'INFO',
        },
                'test_4': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

出力側

前準備

$ python3 manage.py startapp test_app
$ cat test_project/urls.py

from django.conf.urls import include
from django.conf.urls import url

urlpatterns = [
    url(r'^test_app/', include('test_app.urls')),
]

$ cat test_app/urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^.*$', views.index, name='index'),
]

$ cat test_app/views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world.")

ログ出してみる

$ cat test_app/views.py

from django.http import HttpResponse
import logging

logger_1 = logging.getLogger('test_1')
logger_2 = logging.getLogger('test_2')
logger_3 = logging.getLogger('test_3')
logger_4 = logging.getLogger('test_4')

def index(request):
    logger_1.debug('test_1 debug')
    logger_1.info('test_1 info')
    logger_1.warn('test_1 warn')
    logger_1.error('test_1 error')
    logger_2.debug('test_1 debug')
    logger_2.info('test_1 info')
    logger_2.warn('test_1 warn')
    logger_2.error('test_1 error')
    logger_3.debug('test_1 debug')
    logger_3.info('test_1 info')
    logger_3.warn('test_1 warn')
    logger_3.error('test_1 error')
    logger_4.debug('test_1 debug')
    logger_4.info('test_1 info')
    logger_4.warn('test_1 warn')
    logger_4.error('test_1 error')
    return HttpResponse("Hello, world.")

確認

  1. スタート
    $ python3 manage.py runserver 0.0.0.0:8000

  2. ブラウザからアクセス
    http://127.0.0.1:8000/test_app/index

  3. ログ確認
    ※ 'level': 'INFO'なので、debugログは表示されない
    ※ ファイル吐き出し系は、以下
    $ cd /tmp/
    $ cat file_no_rotation.log
    $ cat file_size_rotation.log
    $ cat file_time_rotation.log

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9