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 전송 버퍼의 크기를 늘려 보세요.
런타임에 로그 수준 변경
동적 로그 수준 제어가 사용 설정된 경우 런타임에 로그 수준이 변경될 수 있습니다.
-DOT_LOG_LEVEL_DYNAMIC=ON
옵션으로 앱을 빌드합니다. 예를 들면 다음과 같습니다../script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- OpenThread 애플리케이션 내에서 Logging API를 사용합니다.