logging fix

This commit is contained in:
pie
2026-05-18 17:06:01 +01:00
parent ec65e86bd9
commit 17ad49c22e
+22 -3
View File
@@ -13,6 +13,21 @@ from src.strategy.touch_turn import TouchTurnStrategy
from src.execution.manager import ExecutionManager from src.execution.manager import ExecutionManager
from scripts.find_isa_candidates import find_best_isa_tickers from scripts.find_isa_candidates import find_best_isa_tickers
from scripts.backtest import backtest_ticker from scripts.backtest import backtest_ticker
import sys
# Stream redirector to capture print() statements from sub-scripts into the log file
class StreamToLogger:
def __init__(self, logger, log_level=logging.INFO):
self.logger = logger
self.log_level = log_level
self.linebuf = ''
def write(self, buf):
for line in buf.rstrip().splitlines():
self.logger.log(self.log_level, line.rstrip())
def flush(self):
pass
# Force flush handler to ensure bot logs are written to disk immediately # Force flush handler to ensure bot logs are written to disk immediately
class FlushHandler(logging.FileHandler): class FlushHandler(logging.FileHandler):
@@ -24,8 +39,8 @@ class FlushHandler(logging.FileHandler):
os.makedirs("logs", exist_ok=True) os.makedirs("logs", exist_ok=True)
log_filename = datetime.now().strftime("logs/bot_%Y-%m-%d.log") log_filename = datetime.now().strftime("logs/bot_%Y-%m-%d.log")
# Configure logging to both console and file # Configure logging
file_handler = FlushHandler(log_filename) file_handler = FlushHandler(log_filename, mode='a')
stream_handler = logging.StreamHandler() stream_handler = logging.StreamHandler()
logging.basicConfig( logging.basicConfig(
@@ -35,11 +50,15 @@ logging.basicConfig(
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Force flush helper to ensure bot logs are written to disk before thread exit # Redirect stdout and stderr
sys.stdout = StreamToLogger(logger, logging.INFO)
sys.stderr = StreamToLogger(logger, logging.ERROR)
def flush_logs(): def flush_logs():
for handler in logging.getLogger().handlers: for handler in logging.getLogger().handlers:
handler.flush() handler.flush()
PNL_FILE = "pnl_tracking.csv" PNL_FILE = "pnl_tracking.csv"
def record_pnl(ticker, direction, entry_price, exit_price, reason, pnl_r, trading_ticker=None): def record_pnl(ticker, direction, entry_price, exit_price, reason, pnl_r, trading_ticker=None):