Logi OpenThread

Wyświetl źródło na GitHubie

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

openthread/src/core/config/logging.h

Metody wyjściowe

OpenThread obsługuje różne metody logowania wyjściowego, które są zdefiniowane jako stała konfiguracji czasu kompilacji w OPENTHREAD_CONFIG_LOG_OUTPUT. Opcje metody logowania są wymienione w tym pliku:

openthread/src/core/config/logging.h

Domyślna konfiguracja wyjściowa logu to OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

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

Poziomy logów

Logi mogą podawać różne informacje, zdefiniowane jako stała konfiguracji czasu kompilacji w OPENTHREAD_CONFIG_LOG_LEVEL. Opcje poziomu są wymienione w tym pliku:

openthread/include/openthread/platform/logging.h

Lista poziomów logów jest dostępna również w dokumentacji API Platforma logowania makr.

Domyślny poziom logu to OT_LOG_LEVEL_CRIT. Wyświetla on tylko najważniejsze logi. Zmień poziom, aby zobaczyć więcej logów. Aby wyświetlić wszystkie logi OpenThread, użyj OT_LOG_LEVEL_DEBG.

Regiony logów

Regiony logów określają, które obszary kodu OpenThread są włączone na potrzeby logowania. Wyliczenie regionu jest zdefiniowane w tym pliku:

openthread/include/openthread/platform/logging.h

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

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

Domyślna funkcja logowania

Domyślną funkcją logowania w ramach OpenThread jest otPlatLog. Jest ona zdefiniowana jako stała konfiguracji kompilacji w czasie 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 przykładowych aplikacjach OpenThread, użyj opcji tworzenia marki OT_REFERENCE_DEVICE. Aby na przykład użyć go w aplikacji wiersza poleceń w przypadku CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

Możesz też zaktualizować plik openthread/etc/cmake/options.cmake, aby domyślnie włączyć go podczas tworzenia.

Jak włączyć logi

Zanim włączysz logi, sprawdź, czy środowisko jest skonfigurowane pod kątem tworzenia OpenThread. Więcej informacji znajdziesz w artykule Build OpenThread.

Włącz wszystkie logi

Aby szybko włączyć wszystkie poziomy logów i regionów, użyj opcji cmake OT_FULL_LOGS:

./script/build -DOT_FULL_LOGS=ON

Ten przełącznik ustawia poziom logu na OT_LOG_LEVEL_DEBG i włącza wszystkie flagi regionu.

Włączanie określonego poziomu logów

Aby włączyć określony poziom logów, edytuj openthread/src/core/config/logging.h i zaktualizuj OPENTHREAD_CONFIG_LOG_LEVEL do wybranego poziomu, a następnie utwórz OpenThread. Aby na przykład 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 systemie Linux jest to /var/log/syslog..

  1. Utwórz przykład symulacji 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 w czasie rzeczywistym dane wyjściowe dzienników OT:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Wyświetl węzeł w symulowanym węźle:
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

Przejdź z powrotem do okna terminala z poleceniem tail. Logi powinny wyświetlać się w czasie rzeczywistym dla symulowanego węzła. Zwróć uwagę na tagi dziennika w danych wyjściowych: [INFO], [DEBG], [NOTE]. Wszystkie te poziomy odpowiadają poziomom logów. Jeśli na przykład zmienisz poziom logu na OT_LOG_LEVEL_INFO, logi DEBG znikną 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 wiersza poleceń

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

  1. Edytuj plik konfiguracji platformy przykładowej i zmień dane wyjściowe logu na aplikację. W przypadku symulacji wygląda to tak: 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 logi:
    ./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 logu powinny się pojawić w tym samym oknie co interfejs wiersza poleceń OpenThread, gdy są przetwarzane polecenia.

Jeśli dodasz niestandardowe logowanie i włączysz wszystkie logi, bufor interfejsu wiersza poleceń lub bufor przesyłania UART może nie być wystarczająco duży, aby obsłużyć dodatkowe logi niestandardowe. Jeśli niektóre logi nie pojawiają się w odpowiednim momencie, spróbuj zwiększyć rozmiar bufora wiersza poleceń wiersza poleceń zdefiniowanych jako OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH w /openthread/src/cli/cli_config.h lub zwiększyć rozmiar bufora UART przesyłania, zgodnie z definicją OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE w pliku konfiguracji platformy, na przykład /src/nrf52840/openthread-core-nrf52840-config.h.

Wyświetlanie logów dla NCP

Logi NCP można wysyłać przez wpantund do syslog hosta. W przypadku hosta Linuksa to /var/log/syslog.

Aby włączyć logowanie NCP, użyj wartości OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP. Zmień go w pliku konfiguracji platformy.

Aby na przykład włączyć tę opcję dla numeru #f52840 połączonego z systemem Linux:

  1. Edytuj plik konfiguracji platformy i zmień dane wyjściowe logu na aplikację. W przypadku numeruf55840 będzie 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 wymaganym poziomem logów i innymi flagami NCP. Aby utworzyć element łączący ze wszystkimi włączonymi logami:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Flash NCP, połącz go z hostem Linux i uruchom wpantund zgodnie z opisem w repozytorium wpantund.

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

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

  5. Logi OpenThread powinny wyświetlać się w czasie rzeczywistym dla NCP. Możesz je też zobaczyć w danych wyjściowych wpantund.

Zmiana poziomu rejestrowania w czasie działania

Poziomy logów można zmieniać w czasie działania, jeśli włączone jest dynamiczne kontrolowanie poziomu rejestrowania.

  1. Utwórz aplikację za pomocą opcji -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 rejestrowania w zależności od implementacji:
    1. W przypadku system-on-chip (SoC) użyj Logging API w aplikacji OpenThread.
    2. W przypadku numeru NCP w wierszu poleceń wpisz wpanctl. Definicję poziomu logów znajdziesz w narzędziu wpantund w środowisku wpantund dostępnym w repozytorium wpantund, a w interfejsie Spinel API
      wpanctl set OpenThread:LogLevel 5