参考:
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.")
確認
-
スタート
$ python3 manage.py runserver 0.0.0.0:8000
-
ブラウザからアクセス
http://127.0.0.1:8000/test_app/index -
ログ確認
※ 'level': 'INFO'なので、debugログは表示されない
※ ファイル吐き出し系は、以下
$ cd /tmp/
$ cat file_no_rotation.log
$ cat file_size_rotation.log
$ cat file_time_rotation.log