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.
- Utwórz przykładową symulację z włączonymi wszystkimi logami:
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Uruchom symulowany węzeł:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- W nowym oknie terminala skonfiguruj dane wyjściowe 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 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.
- 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
- Utwórz przykład symulacji z odpowiednim poziomem logów. Aby włączyć wszystkie
dzienniki:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Uruchom symulowany węzeł:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- 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:
- 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
- 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
Przeprowadź Flasha NCP, połącz go z hostem Linuksa i uruchom
wpantund
jako szczegóły znajdziesz w repozytorium wpantund.Po uruchomieniu NCP sprawdź
syslog
na komputerze z Linuksem:tail -F /var/log/syslog | grep "wpantund"
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.
- 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
- Zmień poziom rejestrowania w zależności od implementacji:
- W przypadku układu SOC: użyj interfejsu Logging API, który znajdziesz w Aplikacja OpenThread.
- W przypadku NCP wpisz w wierszu poleceń
wpanctl
. Aby zapoznać się z definicjami poziomów logów, zobaczwpan-properties.h
w repozytoriumwpantund
dla wszystkich usług dostępnych dlawpanctl
i interfejsu Spinel API.wpanctl set OpenThread:LogLevel 5