Logi OpenThread

Wyświetl źródło w GitHubie

Logi OpenThread są kontrolowane przez liczne stałe konfiguracji w czasie kompilacji. O ile nie zaznaczono inaczej, te 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ła konfiguracji podczas kompilacji OPENTHREAD_CONFIG_LOG_OUTPUT. Opcje metody rejestrowania znajdują się w tym pliku:

openthread/src/core/config/logging.h

Domyślna konfiguracja wyjścia logów to OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

Metoda wyjścia to przykład sytuacji, w której może być konieczne zaktualizowanie stałej konfiguracji na poziomie platformy zamiast podstawowej. Aby na przykład zmienić metodę wyjściową w aplikacji przykładowej symulacji, zamiast openthread/src/core/config/logging.h użyj openthread/examples/platforms/simulation/openthread-core-simulation-config.h.

Poziomy rejestrowania

Dzienniki mogą zawierać różne poziomy informacji zdefiniowane jako stała konfiguracji OPENTHREAD_CONFIG_LOG_LEVEL w czasie kompilacji. Opcje poziomu są wymienione w tym pliku:

openthread/include/openthread/platform/logging.h

Lista poziomów logowania jest też dostępna w przewodniku po interfejsie API Platform Logging Macros.

Domyślny poziom logowania to OT_LOG_LEVEL_CRIT, który wyświetla tylko najważniejsze logi. Aby zobaczyć więcej logów, zmień poziom. Aby wyświetlić wszystkie logi OpenThread, użyj OT_LOG_LEVEL_DEBG.

Regiony logów

Regiony logowania określają, które obszary kodu OpenThread są włączone do rejestrowania. Wyliczenie regionów jest zdefiniowane w tym pliku:

openthread/include/openthread/platform/logging.h

Lista regionów logów jest też dostępna w dokumentacji interfejsu API Platform Logging Enumerations.

Obszary logowania są często używane jako parametry w funkcjach logowania. Domyślnie wszystkie regiony są włączone.

Domyślna funkcja logowania

Domyślną funkcją do rejestrowania w OpenThread jest otPlatLog, zdefiniowana jako stała konfiguracji w czasie kompilacji OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

Więcej informacji o tej funkcji znajdziesz w dokumentacji interfejsu API Platform Logging.

Aby użyć tej funkcji bezpośrednio w aplikacji przykładowej OpenThread, użyj opcji OT_REFERENCE_DEVICEcmake. 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ć dzienniki

Zanim włączysz dzienniki, upewnij się, że Twoje środowisko jest skonfigurowane pod kątem kompilowania OpenThread. Więcej informacji znajdziesz w sekcji Build OpenThread (Tworzenie wątku OpenThread).

Włącz wszystkie logi

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

./script/build -DOT_FULL_LOGS=ON

Ten przełącznik ustawia poziom logowania na OT_LOG_LEVEL_DEBG i włącza wszystkie flagi regionów.

Włącz określony poziom logów

Aby włączyć konkretny poziom logów, edytuj openthread/src/core/config/logging.h i zaktualizuj OPENTHREAD_CONFIG_LOG_LEVEL do odpowiedniego poziomu, a następnie utwórz OpenThread. Aby na przykład włączyć logi do poziomu OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Wyświetlanie logów w syslogu

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

  1. Utwórz przykład symulacji ze wszystkimi włączonymi logami:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Uruchomienie symulowanego węzła:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. W nowym oknie terminala skonfiguruj wyświetlanie 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, w którym uruchomiono polecenie tail. Logi powinny być wyświetlane w czasie rzeczywistym w przypadku węzła symulowanego. Zwróć uwagę na tagi logów w wyniku: [INFO], [DEBG], [NOTE]. Wszystkie te poziomy odpowiadają poziomom logowania. Jeśli na przykład zmienisz poziom logowania na OT_LOG_LEVEL_INFO, DEBG logi znikną z wyjścia.

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świetlanie logów w aplikacji wiersza poleceń

Logi można wyświetlać bezpośrednio w przykładowej aplikacji OpenThread CLI.

  1. Zmodyfikuj plik konfiguracji dla przykładowej platformy i zmień dane wyjściowe dziennika na dane aplikacji. W przypadku przykładu 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 pożądanym poziomem logów. Aby włączyć wszystkie dzienniki:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Uruchamianie symulowanego węzła:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Podczas przetwarzania poleceń log powinien wyświetlać się w tym samym oknie co interfejs wiersza poleceń OpenThread.

Jeśli dodasz logowanie niestandardowe i włączysz wszystkie dzienniki, bufor linii CLI lub bufor transmisji UART może nie być wystarczająco duży, aby obsługiwać dodatkowe dzienniki niestandardowe. Jeśli niektóre logi nie pojawiają się, gdy powinny, zwiększ rozmiar bufora wiersza wiersza poleceń (określony jako OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH w /openthread/src/cli/cli_config.h) lub zwiększ rozmiar bufora transmisji UART określony jako OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE w pliku konfiguracji platformy (np. /src/nrf52840/openthread-core-nrf52840-config.h).

Wyświetlanie logów NCP

Logo NCP może być wysyłane przez wpantund do syslog hosta. W przypadku hosta systemu Linux jest to /var/log/syslog.

Aby włączyć rejestrowanie NCP, użyj wartości OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP. Zmień to w pliku konfiguracyjnym platformy.

Aby na przykład włączyć tę funkcję w przypadku urządzenia nrf52840 połączonego z hostem Linux:

  1. Zmodyfikuj plik konfiguracji platformy i zmień dane wyjściowe dziennika na dane aplikacji. W przypadku nrf52840 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 nrf52840 z pożądanym poziomem logów i innych flag związanych z NCP. Aby utworzyć element łączenia z włączonymi wszystkimi logami:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Przeprowadź aktualizację oprogramowania NCP, połącz go z hostem Linuxa i uruchom wpantund zgodnie z instrukcjami w repozytorium wpantund.

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

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

  5. Logi OpenThread powinny być wyświetlane w czasie rzeczywistym w przypadku NCP. Możesz je też zobaczyć 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ę z opcją -DOT_LOG_LEVEL_DYNAMIC=ON. Na przykład
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Zmień poziom logowania w zależności od implementacji:
    1. W przypadku układu SOC użyj interfejsu Logging API w aplikacji OpenThread.
    2. W przypadku NCP wpisz w wierszu poleceń wpanctl. W repozytorium wpantund (wpan-properties.h) znajdziesz wszystkie właściwości udostępnione wpanctl, a w interfejsie Spinel API – definicje poziomów logowania.
      wpanctl set OpenThread:LogLevel 5