Logi OpenThread

Wyświetl źródło w GitHubie

Logi OpenThread są kontrolowane przez wiele stałych konfiguracyjnych czasu 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 czasu kompilacji OPENTHREAD_CONFIG_LOG_OUTPUT. Opcje metody rejestrowania są wymienione w tym pliku:

openthread/src/core/config/logging.h

Domyślna konfiguracja danych wyjściowych logu to OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

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

Poziomy rejestrowania

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

openthread/include/openthread/platform/logging.h

Lista poziomów logowania jest też dostępna w przewodniku po interfejsie API makr logowania na platformie.

Domyślny poziom logowania to OT_LOG_LEVEL_CRIT, który generuje tylko najważniejsze logi. W razie potrzeby zmień poziom, aby wyświetlić więcej logów. 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 na potrzeby logowania. Wyliczenie regionu jest zdefiniowane w tym pliku:

openthread/include/openthread/platform/logging.h

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

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

Domyślna funkcja rejestrowania

Domyślną funkcją logowania w OpenThread jest otPlatLog, zdefiniowana jako stała konfiguracji czasu kompilacji OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

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

Aby używać tej funkcji bezpośrednio w przykładowych aplikacjach OpenThread, użyj opcji OT_REFERENCE_DEVICE cmake. Aby na przykład użyć go w aplikacji CLI w przypadku przykładu CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

Możesz też zaktualizować plik openthread/etc/cmake/options.cmake, aby był domyślnie włączony podczas kompilacji.

Włączanie dzienników

Zanim włączysz logi, upewnij się, że Twoje środowisko jest skonfigurowane pod kątem kompilowania OpenThread. Więcej informacji znajdziesz w artykule Kompilowanie OpenThread.

Włącz wszystkie dzienniki

Aby szybko włączyć wszystkie poziomy logowania i regiony, użyj opcji OT_FULL_LOGS 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łączanie określonego poziomu logów

Aby włączyć określony poziom logów, zmień openthread/src/core/config/logging.h i zaktualizuj OPENTHREAD_CONFIG_LOG_LEVEL do wybranego poziomu, a następnie skompiluj 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świetlanie logów w syslogu

Domyślnie logi są wysyłane do syslog. W systemie Linux jest to /var/log/syslog..

  1. Utwórz przykład symulacji z włączonymi wszystkimi dziennikami:
    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. Na symulowanym węźle wyświetl 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 działa polecenie tail. Logi powinny być wyświetlane w czasie rzeczywistym w przypadku symulowanego węzła. Zwróć uwagę na tagi logów w danych wyjściowych: [INFO], [DEBG], [NOTE]. Wszystkie te wartości odpowiadają poziomom logowania. Jeśli na przykład zmienisz poziom rejestrowania 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świetlanie logów w aplikacji CLI

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

  1. Edytuj plik konfiguracji przykładowej platformy i zmień log output na app. W przypadku symulacji będzie 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 logi:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Uruchom symulowany węzeł:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. W tym samym oknie co interfejs wiersza poleceń OpenThread powinny się pojawić dane wyjściowe logu w miarę przetwarzania poleceń.

Jeśli dodasz logowanie niestandardowe i włączysz wszystkie dzienniki, bufor wiersza interfejsu CLI lub bufor transmisji UART może być za mały, aby obsłużyć dodatkowe dzienniki niestandardowe. Jeśli niektóre dzienniki nie pojawiają się, gdy powinny, spróbuj zwiększyć rozmiar bufora wiersza interfejsu CLI, zdefiniowanego jako OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH/openthread/src/cli/cli_config.h, lub rozmiar bufora transmisji UART, zdefiniowanego jako OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE w pliku konfiguracyjnym platformy, np. /src/nrf52840/openthread-core-nrf52840-config.h.

Zmiana poziomu logowania w czasie działania

Poziomy logowania można zmieniać w czasie działania, jeśli włączona jest dynamiczna kontrola poziomu logowania.

  1. Skompiluj 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. Użyj interfejsu Logging API w aplikacji OpenThread.