Djangoでログを出すようにしたかったので、Pythonのloggerを使えるよう設定しました。
Contents
settings.pyの設定
まず、settings.pyに以下のように設定を追加します。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': { # ログの書式を設定
'verbose': {
'format': '%(asctime)s %(levelname)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(asctime)s %(levelname)s %(message)s'
},
},
'handlers': {
'mail_admins': { # メールを送信する
'level': 'ERROR', # ERROR以上の場合出力
'class': 'django.utils.log.AdminEmailHandler', # ログを出力するクラス
'formatter': 'simple', # どの出力フォーマットで出すかを名前で指定
},
'file': { # ファイルに出力する
'level': 'DEBUG', # DEBUG以上の場合出力
'class': 'logging.FileHandler', # ログを出力するクラス
'filename': os.path.join(BASE_DIR, 'django.log'),
'formatter': 'simple', # どの出力フォーマットで出すかを名前で指定
},
},
'loggers': { # ロガーを設定、ここに設定した名前を呼び出す
'debug': {
'handlers': ['file'],
'level': 'DEBUG',
},
'error': {
'handlers': ['file', 'mail_admins'],
'level': 'ERROR',
},
}
}
loggerの呼び出し
以下でloggerを使います。
# -*- coding:utf-8 -*-
from django.core.management.base import BaseCommand
import ccxt
from .bitmex_api import bitmexApi
import logging
# BaseCommandを継承して作成
class Command(BaseCommand):
# python manage.py help count_entryで表示されるメッセージ
help = 'Display the number of blog articles'
# コマンドが実行された際に呼ばれるメソッド
def handle(self, *args, **options):
bitmex = bitmexApi.bitmex()
positions = bitmex.private_get_position()
orders = bitmex.fetch_open_orders()
if len(positions) == 0 and len(orders) == 0:
self.logging('debug', 'no positions, no orders')
def logging(self, level, message):
if level == 'debug':
logger = logging.getLogger('debug')
logger.debug(message)
else:
logger = logging.getLogger('error')
logger.error(message)
最初にimport
import logging
debugとerrorそれぞれを出力できるように
def logging(self, level, message):
を作成します。
settings.pyで設定した’debug’を使用します。
logger = logging.getLogger('debug')
メッセージをdebugとして出力します。
logger.debug(message)
エラーメッセージを吐き出す際は、以下のようにして出力レベルとメッセージを渡してやります。
self.logging('debug', 'no positions, no orders')


