Logowanie i debugowanie

Niezawodne logowanie jest jednym z kluczowych komponentów architektury Bota transakcyjnego ByNinja. Każda ważna akcja wewnątrz systemu jest rejestrowana, strukturyzowana i przesyłana w czasie rzeczywistym przez integrację z Telegramem. Pozwala to handlowcom na zdalne monitorowanie bota, natychmiastowe wykrywanie problemów i debugowanie złożonych scenariuszy transakcyjnych bez bezpośredniego dostępu do serwera.

System logowania jest zaprojektowany wokół trzech głównych celów:

  • Monitorowanie w czasie rzeczywistym
  • Szczegółowa diagnostyka błędów
  • Zdalna obserwowalność przez Telegram

W przeciwieństwie do podstawowych implementacji tylko z konsolą, infrastruktura ByNinja łączy rotujące pliki logów, wyjście konsoli, przekazywanie TCP i dostarczanie przez Telegram w ujednoliconą sieć monitorowania.


Struktura logów

Bot używa scentralizowanej architektury logowania zbudowanej na module logowania Pythona.

Każda wiadomość logu ma ustandaryzowaną strukturę:

Code
2026-05-19 14:32:11 - TradingBot - INFO - Opened BUY position BTCUSDT

Format zawiera:

  • Znacznik czasu
  • Nazwę loggera
  • Poziom ważności
  • Czytelną dla człowieka wiadomość

Przykładowa konfiguracja formatowania:

Code
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'

Ta struktura sprawia, że logi są łatwe do:

  • Szukania
  • Parsowania
  • Filtrowania
  • Analizowania
  • Przekazywania do systemów zewnętrznych

System używa wielu poziomów logowania:

PoziomCel
DEBUGWewnętrzny przepływ wykonania
INFOAkcje transakcyjne i aktualizacje statusu
WARNINGPodejrzane lub nieoczekiwane zachowanie
ERROROdwracalne awarie
CRITICALKrytyczne problemy systemowe

Rotujące pliki logów

Logger automatycznie przechowuje logi w rotujących plikach za pomocą RotatingFileHandler.

Funkcje obejmują:

  • Automatyczną trwałość logów
  • Limity rozmiaru pliku
  • Kopie zapasowe historii
  • Obsługę kodowania UTF-8

Konfiguracja:

Code
RotatingFileHandler(
    filename=self._log_file,
    maxBytes=250*1024*1024,
    backupCount=5,
    encoding='utf-8'
)

Zapobiega to niekontrolowanemu wzrostowi logów, zachowując jednocześnie historyczne dane debugowania.

System przechowuje:

  • Bieżący aktywny log
  • Do 5 zarchiwizowanych plików logów
  • 250 MB na plik

To podejście jest szczególnie ważne dla długo działających systemów transakcyjnych pracujących w trybie ciągłym 24/7.


Logowanie do Telegrama w czasie rzeczywistym

Jedną z kluczowych cech infrastruktury ByNinja jest to, że logi bota transakcyjnego są automatycznie przekazywane do bota Telegram w czasie rzeczywistym.

Architektura działa w ten sposób:

Code
Trading Bot
    ↓
Python Logger
    ↓
TCP Log Handler
    ↓
TCP Client
    ↓
Telegram TCP Server
    ↓
Telegram Bot
    ↓
Telegram Chat

Każde ważne zdarzenie wygenerowane przez bota transakcyjnego może natychmiast pojawić się w prywatnym kanale lub czacie Telegram.

Przykłady:

Code
✅ Position opened
📈 Take profit executed
⚠️ API rate limit warning
❌ Binance order rejected
🛑 Emergency shutdown triggered

Daje to operatorowi natychmiastowy wgląd w system bez dostępu SSH lub narzędzi do monitorowania serwera.

Mechanizm przekazywania jest zaimplementowany za pomocą niestandardowego handlera logowania TCP:

Code
tcp_handler = TCPLogHandler(tcp_manager)
logger.addHandler(tcp_handler)

Serwer Telegram odbiera wiadomości przez TCP i przekazuje je bezpośrednio do API Bota Telegram.

Skutecznie przekształca to Telegram w pulpit zdalnego monitorowania silnika transakcyjnego w czasie rzeczywistym.


Przepływ debugowania

Przepływ debugowania jest zaprojektowany do szybkiej izolacji problemów i odzyskiwania.

Krok 1 — Wykryj problem

Większość problemów jest natychmiast widoczna przez powiadomienia Telegram.

Przykład:

Code
❌ Error starting TCP client: Connection refused

lub:

Code
⚠️ Unknown message type

Ponieważ logi są dostarczane w czasie rzeczywistym, problemy często można wykryć w ciągu kilku sekund.

Krok 2 — Sprawdź szczegółowe logi

Gdy wymagane jest głębsze dochodzenie, programiści mogą sprawdzić:

  • trading.log
  • telegram_tcp.log
  • trading_tcp.log

Logi zapewniają chronologiczne ślady wykonania dla:

  • Decyzji strategicznych
  • Wykonania zleceń
  • Komunikacji TCP
  • Interakcji Telegram
  • Operacji trwałości
  • Zdarzeń zamknięcia

Krok 3 — Odtwórz scenariusz

Poziom DEBUG można włączyć, aby przechwycić:

  • Przejścia stanów wewnętrznych
  • Przepływ wiadomości TCP
  • Wykonanie poleceń
  • Cykl życia wątków
  • Operacje trwałości

Pozwala to programistom odtworzyć trudne przypadki brzegowe i warunki wyścigu.

Krok 4 — Śledź łańcuch awarii

Ponieważ każdy podsystem używa scentralizowanego logowania, możliwe staje się zrekonstruowanie dokładnej sekwencji zdarzeń prowadzących do awarii.

Przykładowy łańcuch:

Code
Signal generated
→ Order request sent
→ Binance API timeout
→ Retry triggered
→ Risk manager warning
→ Position recovery activated

Jest to szczególnie przydatne w asynchronicznych systemach wielowątkowych, gdzie problemy mogą pochodzić z daleka od widocznego punktu awarii.


Śledzenie błędów

System logowania jest w dużym stopniu skoncentrowany na strukturalnym śledzeniu błędów.

Wszystkie krytyczne operacje są owinięte w bloki try/except z jawnym raportowaniem błędów:

Code
except Exception as e:
    logger.error(f"❌ Critical error: {e}")

Zapewnia to, że nieoczekiwane awarie nigdy nie znikają po cichu.

System śledzi błędy w wielu warstwach:

WarstwaPrzykładowe błędy
API BinanceOdrzucenie zlecenia, timeout
Warstwa TCPUtrata połączenia
Bot TelegramAwarie API
TrwałośćUszkodzenie pliku
Silnik strategiiNieprawidłowe sygnały
WielowątkowośćZakleszczenia lub awarie

Profesjonalna wskazówka: Użyj edytora kodu

Dla znacznie lepszego doświadczenia podczas edycji plików konfiguracyjnych zalecamy użycie profesjonalnego edytora kodu, takiego jak Visual Studio Code.

Download VS Code ↗

Logowanie łagodnego zamykania

Bot rejestruje również operacje zamykania i odzyskiwania.

Przykład:

Code
🛑 Shutdown signal received...
✅ PersistentMap stopped
💾 Forcing save to disk...

Jest to niezwykle ważne w środowiskach transakcyjnych, ponieważ potwierdza, że:

  • Pozycje zostały zapisane
  • Wątki zatrzymały się poprawnie
  • Oczekujące operacje zostały zakończone
  • Trwałość została pomyślnie opróżniona

Zdalne operacje przez Telegram

Integracja z Telegramem nie ogranicza się do pasywnych logów.

Ta sama infrastruktura obsługuje również zdalne wykonywanie poleceń.

Przykłady:

Code
/starttrading
/stoptrading
/getstatus
/getstats
/buy BTCUSDT
/sell ETHUSDT

Tworzy to w pełni zdalny przepływ operacyjny:

  • Odbieraj alerty w Telegramie
  • Analizuj logi
  • Wysyłaj polecenia odzyskiwania
  • Monitoruj wyniki wykonania

Wszystko bez bezpośredniego dostępu do serwera.


Architektura monitorowania zorientowana na produkcję

Ogólna architektura logowania łączy kilka praktyk klasy produkcyjnej:

  • Scentralizowane logowanie
  • Strukturalne formatowanie
  • Rotujące pliki logów
  • Powiadomienia zdalne w czasie rzeczywistym
  • Logowanie bezpieczne dla wielowątkowości
  • Przesyłanie strumieniowe logów TCP
  • Śledzenie łagodnego zamykania
  • Zdalna kontrola operacyjna

Przekształca to podsystem logowania z prostego narzędzia debugowania w kompletną infrastrukturę monitorowania i operacyjną dla zautomatyzowanego handlu kryptowalutami.