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_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ć 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.
- Utwórz przykład symulacji ze wszystkimi włączonymi logami:
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Uruchomienie symulowanego węzła:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- W nowym oknie terminala skonfiguruj wyświetlanie logów OT w czasie rzeczywistym:
tail -F /var/log/syslog | grep "ot-cli-ftd"
- W symulowanym węźle otwórz Thread:
dataset init new
Donedataset
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 Donedataset commit active
Doneifconfig up
Donethread 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.
- 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
- Utwórz przykład symulacji z pożądanym poziomem logów. Aby włączyć wszystkie dzienniki:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Uruchamianie symulowanego węzła:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- 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:
- 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
- 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
Przeprowadź aktualizację oprogramowania NCP, połącz go z hostem Linuxa i uruchom
wpantund
zgodnie z instrukcjami w repozytorium wpantund.Po uruchomieniu NCP sprawdź
syslog
na komputerze z Linuksem:tail -F /var/log/syslog | grep "wpantund"
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.
- 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
- Zmień poziom logowania w zależności od implementacji:
- W przypadku układu SOC użyj interfejsu Logging API w aplikacji OpenThread.
- W przypadku NCP wpisz w wierszu poleceń
wpanctl
. W repozytoriumwpantund
(wpan-properties.h
) znajdziesz wszystkie właściwości udostępnionewpanctl
, a w interfejsie Spinel API – definicje poziomów logowania.wpanctl set OpenThread:LogLevel 5