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.
.
- Utwórz przykład symulacji z włączonymi wszystkimi dziennikami:
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"
- Na symulowanym węźle wyświetl 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 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.
- 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
- Utwórz przykład symulacji z odpowiednim poziomem logów. Aby włączyć wszystkie logi:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Uruchom symulowany węzeł:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- 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
w /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.
- 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
- Użyj interfejsu Logging API w aplikacji OpenThread.