Logi OpenThread

Wyświetl źródło na GitHubie

Logi OpenThread są kontrolowane przez wiele stałych konfiguracji podczas kompilacji. O ile nie zaznaczono inaczej, stałe są zdefiniowane w tym pliku:

openthread/src/core/config/logging.h

Metody wyjściowe

OpenThread obsługuje różne metody logowania danych wyjściowych, zdefiniowane jako stałą konfiguracji czasu kompilacji (OPENTHREAD_CONFIG_LOG_OUTPUT). metod logowania i zarządzania nimi znajdziesz w tym pliku:

openthread/src/core/config/logging.h

Domyślna konfiguracja danych wyjściowych logów to OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED

Metoda wyjściowa to przykład sytuacji, w której może być konieczna aktualizacja na poziomie platformy, a nie podstawowej. Aby na przykład: zmień metodę wyjścia w przykładowej aplikacji symulacyjnej, edytuj openthread/examples/platforms/simulation/openthread-core-simulation-config.h zamiast openthread/src/core/config/logging.h

Poziomy logu

Logi mogą generować informacje na różnym poziomie, zdefiniowanym jako czas kompilacji stałą konfiguracji OPENTHREAD_CONFIG_LOG_LEVEL. Dostępne poziomy w następującym pliku:

openthread/include/openthread/platform/logging.h

Lista poziomów logowania jest również dostępna na stronie Platforma Dokumentacja interfejsu API w usłudze Logging Macros.

Domyślny poziom logu to OT_LOG_LEVEL_CRIT. Podaje on tylko najwięcej dzienników krytycznych. Aby zobaczyć więcej logów, zmień poziom. Aby zobaczyć wszystkich Logi OpenThread – użyj OT_LOG_LEVEL_DEBG.

Regiony logów

Regiony logów określają, dla których obszarów kodu OpenThread są włączone logowanie. Wyliczenie regionów jest zdefiniowane w tym pliku:

openthread/include/openthread/platform/logging.h

Lista regionów logów jest też dostępna na Platformie Dokumentacja interfejsu API Logging Enumerations.

Regiony logów są zwykle używane jako parametry w funkcjach logów. Wszystkie regiony domyślnie włączone.

Domyślna funkcja logowania

Domyślna funkcja logowania w OpenThread to otPlatLog zdefiniowana jako stałą konfiguracji czasu kompilacji dla argumentu OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION

Zobacz interfejs Platform Logging API. znajdziesz więcej informacji o tej funkcji.

Aby użyć tej funkcji bezpośrednio w przykładowych aplikacjach OpenThread, użyj funkcji OT_REFERENCE_DEVICE cmake. Aby na przykład użyć go w aplikacji interfejsu wiersza poleceń na potrzeby przykładu CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

Możesz też zaktualizować plik openthread/etc/cmake/options.cmake, aby domyślnie włączał tę funkcję podczas tworzenia.

Jak włączyć logi

Przed włączeniem logów sprawdź, czy środowisko jest skonfigurowane do kompilacji OpenThread. Więcej informacji znajdziesz w sekcji Build OpenThread (Tworzenie wątku OpenThread).

Włącz wszystkie logi

Aby szybko włączyć wszystkie poziomy logu i regiony, użyj opcji cmake OT_FULL_LOGS:

./script/build -DOT_FULL_LOGS=ON

Ten przełącznik ustawia poziom logowania na OT_LOG_LEVEL_DEBG i włącza cały region flagami.

Włącz określony poziom logów

Aby włączyć określony poziom logów, zmodyfikuj openthread/src/core/config/logging.h i zaktualizuj OPENTHREAD_CONFIG_LOG_LEVEL na odpowiedni poziom, a następnie utwórz OpenThread. Dla: na przykład, aby włączyć logi do OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Wyświetl logi w syslog

Logi są domyślnie wysyłane do: syslog. W Linuksie jest to /var/log/syslog.

  1. Utwórz przykładową symulację z włączonymi wszystkimi logami:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Uruchom symulowany węzeł:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. W nowym oknie terminala skonfiguruj dane wyjściowe logów OT w czasie rzeczywistym:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. W symulowanym węźle otwórz Thread:
dataset init new
Done
dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: d63e8e3e495ebbc3
Mesh Local Prefix: fd3d:b50b:f96d:722d/64
Network Key: dfd34f0f05cad978ec4e32b0413038ff
Network Name: OpenThread-8f28
PAN ID: 0x8f28
PSKc: c23a76e98f1a6483639b1ac1271e2e27
Security Policy: 0, onrcb
Done
dataset commit active
Done
ifconfig up
Done
thread start
Done

Wróć do okna terminala z uruchomionym poleceniem tail. Dzienniki powinny wyświetlać się w czasie rzeczywistym przez w symulowanym węźle. Zwróć uwagę na tagi logu w danych wyjściowych: [INFO], [DEBG], [NOTE]. Wszystkie te odpowiedzi do poziomów rejestrowania. Jeśli na przykład zmienisz poziom rejestrowania na OT_LOG_LEVEL_INFO, logi DEBG znikają z danych wyjściowych.

ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: SrcAddrMatch - Cleared all entries
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x7f133b) [Ip6+ Ip6- LLAddr MLAddr Rloc+ KeySeqCntr NetData Ip6Mult+ Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset panid
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset commit active
ot-cli-ftd[30055]: [1] [INFO]-MESH-CP-: Active dataset set
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio sleeping
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: RadioPanId: 0x8f28
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x007f0100) [KeySeqCntr Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: ifconfig up
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio receiving on channel 11
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: thread start
ot-cli-ftd[30055]: [1] [NOTE]-MLE-----: Role Disabled -> Detached
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Attempt to become router
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Saved NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x7d4, maccntr:0x7d0, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [DEBG]-MLE-----: Store Network Information
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Send Link Request (ff02:0:0:0:0:0:0:2)

Wyświetl logi w aplikacji interfejsu wiersza poleceń

Logi można wyświetlać bezpośrednio w przykładowej aplikacji interfejsu wiersza poleceń OpenThread.

  1. Edytuj plik konfiguracji przykładowej platformy i zmień dziennik dane wyjściowe do aplikacji. W przykładzie symulacji jest to openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Utwórz przykład symulacji z odpowiednim poziomem logów. Aby włączyć wszystkie dzienniki:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Uruchom symulowany węzeł:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Dane wyjściowe logów powinny być widoczne w tym samym oknie co interfejs wiersza poleceń OpenThread, w którym i przetwarzaj polecenia.

Jeśli masz dodane logowanie niestandardowe i włączone wszystkie logi, bufor wiersza interfejsu wiersza poleceń lub transmisja UART bufor może nie być wystarczająco duży, aby obsłużyć dodatkowe niestandardowe logi. Jeśli niektóre logi nie są są wyświetlane, gdy powinny, spróbuj zwiększyć rozmiar wiersza interfejsu wiersza poleceń bufor, zdefiniowany jako OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH w /openthread/src/cli/cli_config.h lub zwiększenie rozmiaru bufora przesyłania UART, zdefiniowanego jako OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE w pliku konfiguracji platformy, takim jak /src/nrf52840/openthread-core-nrf52840-config.h

Wyświetl logi NCP

Logi NCP mogą być wysyłane przez wpantund do syslog hosta. Dla Host Linuksa, to /var/log/syslog.

Użyj wartości OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP, aby włączyć logowanie NCP. Zmień to w w pliku konfiguracji platformy.

Aby na przykład włączyć tę opcję dla serwera nr f52840 połączonego z hostem z Linuksem:

  1. Zmodyfikuj plik konfiguracji platformy i zmień dane wyjściowe dziennika na aplikację. Dla numeruf52840 jest to ./src/nrf52840/openthread-core-nrf52840-config.h w repozytorium ot-nrf528xx:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Utwórz przykład nr #f52840 z wybranym poziomem logów i innych elementów flagi charakterystyczne dla NCP. Aby utworzyć element łączenia z włączonymi wszystkimi logami:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Przeprowadź Flasha NCP, połącz go z hostem Linuksa i uruchom wpantund jako szczegóły znajdziesz w repozytorium wpantund.

  4. Po uruchomieniu NCP sprawdź syslog na komputerze z Linuksem:

    tail -F /var/log/syslog | grep "wpantund"
    

  5. Logi OpenThread powinny wyświetlać się w czasie rzeczywistym w przypadku NCP. Możesz będą również widoczne w danych wyjściowych wpantund.

Zmiana poziomu logowania w czasie działania

Poziomy logu mogą się zmienić w czasie działania, jeśli włączona jest dynamiczna kontrola poziomu logu.

  1. Utwórz aplikację, korzystając z opcji -DOT_LOG_LEVEL_DYNAMIC=ON. Przykład:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Zmień poziom rejestrowania w zależności od implementacji:
    1. W przypadku układu SOC: użyj interfejsu Logging API, który znajdziesz w Aplikacja OpenThread.
    2. W przypadku NCP wpisz w wierszu poleceń wpanctl. Aby zapoznać się z definicjami poziomów logów, zobacz wpan-properties.h w repozytorium wpantund dla wszystkich usług dostępnych dla wpanctl i interfejsu Spinel API.
      wpanctl set OpenThread:LogLevel 5