OpenThread 로그

GitHub에서 소스 보기

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.입니다.

  1. 모든 로그가 사용 설정된 시뮬레이션 예시를 빌드합니다.
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. 시뮬레이션된 노드를 시작합니다.
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. 새 터미널 창에서 OT 로그의 실시간 출력을 설정합니다.
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. 시뮬레이션된 노드에서 스레드를 불러옵니다.
dataset init new
Done
dataset
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
Done
dataset commit active
Done
ifconfig up
Done
thread 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 예시 앱에서 직접 로그를 볼 수 있습니다.

  1. 예시 플랫폼의 구성 파일을 수정하고 로그 출력을 앱으로 변경합니다. 시뮬레이션 예에서는 openthread/examples/platforms/simulation/openthread-core-simulation-config.h입니다.
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. 원하는 수준의 로그로 시뮬레이션 예시를 빌드합니다. 모든 로그를 사용 설정하려면 다음 안내를 따르세요.
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. 시뮬레이션된 노드를 시작합니다.
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. 명령어가 처리되면 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에서 이를 사용 설정하려면 다음을 실행합니다.

  1. 플랫폼의 구성 파일을 수정하고 로그 출력을 앱으로 변경합니다. nrf52840의 경우 ot-nrf528xx 저장소의 ./src/nrf52840/openthread-core-nrf52840-config.h입니다.
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. 원하는 로그 수준 및 기타 NCP 관련 플래그를 사용하여 nrf52840 예시를 빌드합니다. 모든 로그가 사용 설정된 조인 도구를 빌드하려면 다음 단계를 따르세요.
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. NCP를 플래시하고 Linux 호스트에 연결한 다음 wpantund 저장소에 설명된 대로 wpantund를 시작합니다.

  4. NCP가 실행되면 Linux 머신에서 syslog를 확인합니다.

    tail -F /var/log/syslog | grep "wpantund"
    

  5. NCP에 OpenThread 로그가 실시간으로 표시됩니다. wpantund 출력에서도 볼 수 있습니다.

런타임에 로그 수준 변경

동적 로그 수준 제어가 사용 설정된 경우 런타임 시 로그 수준이 변경될 수 있습니다.

  1. -DOT_LOG_LEVEL_DYNAMIC=ON 옵션으로 앱을 빌드합니다. 예를 들면 다음과 같습니다.
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. 구현에 따라 로그 수준을 변경합니다.
    1. 단일 칩 시스템 (SoC)의 경우 OpenThread 애플리케이션 내의 Logging API를 사용합니다.
    2. NCP의 경우 명령줄에서 wpanctl를 사용합니다. wpanctl에 노출된 모든 속성은 wpantund 저장소의 wpan-properties.h를, 로그 수준 정의는 Spinel API를 참고하세요.
      wpanctl set OpenThread:LogLevel 5