OpenThread 로그는 여러 컴파일-시간 구성 상수에 의해 제어됩니다. 별도로 명시되지 않은 한 이러한 상수는 다음 파일에 정의되어 있습니다.
openthread/src/core/config/logging.h
출력 메서드
OpenThread는 OPENTHREAD_CONFIG_LOG_OUTPUT
의 컴파일 시간 구성 상수로 정의된 다양한 출력 로깅 메서드를 지원합니다. 로깅 메서드 옵션은 다음 파일에 나와 있습니다.
openthread/src/core/config/logging.h
기본 로그 출력 구성은 OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED
입니다.
출력 메서드는 핵심 구성 상수 대신 플랫폼 수준 구성 상수를 업데이트해야 하는 경우의 예입니다. 예를 들어 시뮬레이션 예시 앱에서 출력 메서드를 변경하려면 openthread/src/core/config/logging.h
대신 openthread/examples/platforms/simulation/openthread-core-simulation-config.h
를 수정합니다.
로그 수준
로그는 OPENTHREAD_CONFIG_LOG_LEVEL
의 컴파일 시간 구성 상수로 정의된 다양한 수준의 정보를 출력할 수 있습니다. 수준 옵션은 다음 파일에 나와 있습니다.
openthread/include/openthread/platform/logging.h
로그 수준 목록은 플랫폼 로깅 매크로 API 참조에서도 확인할 수 있습니다.
기본 로그 수준은 OT_LOG_LEVEL_CRIT
이며 가장 중요한 로그만 출력합니다. 원하는 대로 더 많은 로그를 보려면 수준을 변경하세요. 모든 OpenThread 로그를 보려면 OT_LOG_LEVEL_DEBG
를 사용합니다.
로그 리전
로그 리전은 로깅에 사용 설정된 OpenThread 코드의 영역을 결정합니다. 리전 열거는 다음 파일에 정의되어 있습니다.
openthread/include/openthread/platform/logging.h
로그 리전 목록은 플랫폼 로깅 열거형 API 참조에서도 확인할 수 있습니다.
로그 영역은 일반적으로 로그 함수에서 매개변수로 사용됩니다. 기본적으로 모든 지역이 사용 설정되어 있습니다.
기본 로깅 함수
OpenThread 내 로깅의 기본 함수는 otPlatLog
이며 OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION
의 컴파일 시간 구성 상수로 정의됩니다.
이 함수에 관한 자세한 내용은 플랫폼 로깅 API 참조를 참고하세요.
OpenThread 예시 앱에서 이 함수를 직접 사용하려면 OT_REFERENCE_DEVICE
cmake 옵션을 사용하세요. 예를 들어 CC2538 예의 CLI 앱 내에서 이를 사용하려면 다음을 실행합니다.
./script/build -DOT_REFERENCE_DEVICE=ON
또는 빌드할 때 기본적으로 사용 설정하도록 openthread/etc/cmake/options.cmake
파일을 업데이트합니다.
로그를 사용 설정하는 방법
로그를 사용 설정하기 전에 환경이 OpenThread 빌드용으로 구성되어 있는지 확인합니다. 자세한 내용은 OpenThread 빌드를 참고하세요.
모든 로그 사용 설정
모든 로그 수준과 리전을 빠르게 사용 설정하려면 OT_FULL_LOGS
cmake 옵션을 사용하세요.
./script/build -DOT_FULL_LOGS=ON
이 스위치는 로그 수준을 OT_LOG_LEVEL_DEBG
로 설정하고 모든 지역 플래그를 사용 설정합니다.
특정 수준의 로그 사용 설정
특정 수준의 로그를 사용 설정하려면 openthread/src/core/config/logging.h
를 수정하고 OPENTHREAD_CONFIG_LOG_LEVEL
를 원하는 수준으로 업데이트한 다음 OpenThread를 빌드합니다. 예를 들어 최대 OT_LOG_LEVEL_INFO
까지 로그를 사용 설정하려면 다음을 실행합니다.
#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build
syslog에서 로그 보기
로그는 기본적으로 syslog
로 전송됩니다. Linux에서는 /var/log/syslog.
입니다.
- 모든 로그가 사용 설정된 시뮬레이션 예시를 빌드합니다.
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- 시뮬레이션된 노드를 시작합니다.
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- 새 터미널 창에서 OT 로그의 실시간 출력을 설정합니다.
tail -F /var/log/syslog | grep "ot-cli-ftd"
- 시뮬레이션된 노드에서 스레드를 불러옵니다.
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
tail
명령어를 실행하는 터미널 창으로 다시 전환합니다. 시뮬레이션된 노드에 대한 로그가 실시간으로 표시됩니다. 출력의 로그 태그([INFO]
, [DEBG]
, [NOTE]
)를 확인합니다. 이는 모두 로그 수준에 해당합니다. 예를 들어 로그 수준을 OT_LOG_LEVEL_INFO
로 변경하면 DEBG
로그가 출력에서 사라집니다.
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)
CLI 앱에서 로그 보기
OpenThread CLI 예시 앱에서 직접 로그를 볼 수 있습니다.
- 예시 플랫폼의 구성 파일을 수정하고 로그 출력을 앱으로 변경합니다. 시뮬레이션 예에서는
openthread/examples/platforms/simulation/openthread-core-simulation-config.h
입니다.#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- 원하는 수준의 로그로 시뮬레이션 예시를 빌드합니다. 모든 로그를 사용 설정하려면 다음 안내를 따르세요.
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- 시뮬레이션된 노드를 시작합니다.
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- 명령어가 처리되면 OpenThread CLI와 동일한 창에 로그 출력이 표시됩니다.
맞춤 로깅을 추가하고 모든 로그를 사용 설정한 경우 CLI 줄 버퍼 또는 UART 전송 버퍼가 추가 맞춤 로그를 처리하기에 충분하지 않을 수 있습니다. 일부 로그가 표시되어야 할 때 표시되지 않으면 /openthread/src/cli/cli_config.h
에서 OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH
로 정의된 CLI 줄 버퍼의 크기를 늘리거나 플랫폼 구성 파일(예: /src/nrf52840/openthread-core-nrf52840-config.h
)에서 OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE
로 정의된 UART 전송 버퍼의 크기를 늘려 보세요.
NCP 로그 보기
NCP의 로그는 wpantund
를 통해 호스트의 syslog
로 전송될 수 있습니다. Linux 호스트의 경우 /var/log/syslog.
입니다.
OPENTHREAD_CONFIG_LOG_OUTPUT
값을 OPENTHREAD_CONFIG_LOG_OUTPUT_APP
로 사용하여 NCP 로깅을 사용 설정합니다. 플랫폼의 구성 파일에서 이를 변경합니다.
예를 들어 Linux 호스트에 연결된 nrf52840에서 이를 사용 설정하려면 다음을 실행합니다.
- 플랫폼의 구성 파일을 수정하고 로그 출력을 앱으로 변경합니다. nrf52840의 경우 ot-nrf528xx 저장소의
./src/nrf52840/openthread-core-nrf52840-config.h
입니다.#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- 원하는 로그 수준 및 기타 NCP 관련 플래그를 사용하여 nrf52840 예시를 빌드합니다. 모든 로그가 사용 설정된 조인 도구를 빌드하려면 다음 단계를 따르세요.
./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
NCP를 플래시하고 Linux 호스트에 연결한 다음 wpantund 저장소에 설명된 대로
wpantund
를 시작합니다.NCP가 실행되면 Linux 머신에서
syslog
를 확인합니다.tail -F /var/log/syslog | grep "wpantund"
NCP에 OpenThread 로그가 실시간으로 표시됩니다.
wpantund
출력에서도 볼 수 있습니다.
런타임에 로그 수준 변경
동적 로그 수준 제어가 사용 설정된 경우 런타임 시 로그 수준이 변경될 수 있습니다.
-DOT_LOG_LEVEL_DYNAMIC=ON
옵션으로 앱을 빌드합니다. 예를 들면 다음과 같습니다../script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- 구현에 따라 로그 수준을 변경합니다.
- 단일 칩 시스템 (SoC)의 경우 OpenThread 애플리케이션 내의 Logging API를 사용합니다.
- NCP의 경우 명령줄에서
wpanctl
를 사용합니다.wpanctl
에 노출된 모든 속성은wpantund
저장소의wpan-properties.h
를, 로그 수준 정의는 Spinel API를 참고하세요.wpanctl set OpenThread:LogLevel 5