def error(msg: str) -> None: if jh.app_mode() not in LOGGERS: _init_main_logger() # error logs should be logged as info logs as well info(msg) msg = str(msg) from jesse.store import store log_id = jh.generate_unique_id() log_dict = { 'id': log_id, 'timestamp': jh.now_to_timestamp(), 'message': msg } if jh.is_live() and jh.get_config('env.notifications.events.errors', True): # notify_urgently(f"ERROR at \"{jh.get_config('env.identifier')}\" account:\n{msg}") notify_urgently(f"ERROR:\n{msg}") notify(f'ERROR:\n{msg}') if (jh.is_backtesting() and jh.is_debugging()) or jh.is_collecting_data() or jh.is_live(): sync_publish('error_log', log_dict) store.logs.errors.append(log_dict) if jh.is_live() or jh.is_optimizing(): msg = f"[ERROR | {jh.timestamp_to_time(jh.now_to_timestamp())[:19]}] {msg}" logger = LOGGERS[jh.app_mode()] logger.error(msg) if jh.is_live(): from jesse.models.utils import store_log_into_db store_log_into_db(log_dict, 'error')
def info(msg: str, send_notification=False) -> None: if jh.app_mode() not in LOGGERS: _init_main_logger() msg = str(msg) from jesse.store import store log_id = jh.generate_unique_id() log_dict = { 'id': log_id, 'timestamp': jh.now_to_timestamp(), 'message': msg } store.logs.info.append(log_dict) if jh.is_collecting_data() or jh.is_live(): sync_publish('info_log', log_dict) if jh.is_live() or (jh.is_backtesting() and jh.is_debugging()): msg = f"[INFO | {jh.timestamp_to_time(jh.now_to_timestamp())[:19]}] {msg}" logger = LOGGERS[jh.app_mode()] logger.info(msg) if jh.is_live(): from jesse.models.utils import store_log_into_db store_log_into_db(log_dict, 'info') if send_notification: notify(msg)
def _init_main_logger(): session_id = jh.get_session_id() jh.make_directory('storage/logs/live-mode') jh.make_directory('storage/logs/backtest-mode') jh.make_directory('storage/logs/optimize-mode') jh.make_directory('storage/logs/collect-mode') if jh.is_live(): filename = f'storage/logs/live-mode/{session_id}.txt' elif jh.is_collecting_data(): filename = f'storage/logs/collect-mode/{session_id}.txt' elif jh.is_optimizing(): filename = f'storage/logs/optimize-mode/{session_id}.txt' elif jh.is_backtesting(): filename = f'storage/logs/backtest-mode/{session_id}.txt' else: filename = 'storage/logs/etc.txt' new_logger = logging.getLogger(jh.app_mode()) new_logger.setLevel(logging.INFO) new_logger.addHandler(logging.FileHandler(filename, mode='w')) LOGGERS[jh.app_mode()] = new_logger
def test_app_mode(): assert jh.app_mode() == 'backtest'