Djangoでログを出すようにしたかったので、Pythonのloggerを使えるよう設定しました。
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')