OpenThread 로그

<ph type="x-smartling-placeholder"></ph> 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/examples/platforms/simulation/openthread-core-simulation-config.h openthread/src/core/config/logging.h

로그 수준

로그는 컴파일 시간으로 정의된 다양한 수준의 정보를 출력할 수 있습니다. OPENTHREAD_CONFIG_LOG_LEVEL의 구성 상수입니다. 등급 옵션은 다음 파일에 나열되어 있습니다.

openthread/include/openthread/platform/logging.h

로그 수준 목록은 플랫폼에서도 확인할 수 있습니다. Logging Macros API 참조 문서입니다.

기본 로그 수준은 OT_LOG_LEVEL_CRIT이며 가장 많은 결과만 출력됩니다. 중요한 로그를 확인할 수 있습니다 원하는 대로 더 많은 로그를 보려면 수준을 변경하세요. 모두 보기 OpenThread 로그는 OT_LOG_LEVEL_DEBG를 사용합니다.

로그 리전

로그 영역에서 OpenThread 코드의 어떤 영역이 사용 설정되는지 결정합니다. 사용할 수 있습니다 리전 열거는 다음 파일에 정의되어 있습니다.

openthread/include/openthread/platform/logging.h

로그 리전 목록은 플랫폼 Logging Enumerations API 참조입니다.

로그 리전은 일반적으로 로그 함수의 매개변수로 사용됩니다. 모든 리전: 기본적으로 사용 설정되어 있습니다.

기본 로깅 함수

OpenThread 내에서 로깅하는 기본 함수는 otPlatLog이며, 다음과 같이 정의됩니다. 다음의 컴파일 시간 구성 상수: OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION

Platform Logging 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가 버퍼가 추가 커스텀 로그를 처리하기에 충분히 크지 않을 수 있습니다. 일부 로그가 저장되지 않은 경우 필요한 경우 CLI 행의 크기를 늘려보세요. 다음에서 OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH로 정의됨 /openthread/src/cli/cli_config.h 또는 UART 전송 버퍼의 크기 증가( 플랫폼 구성 파일의 OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE(예: /src/nrf52840/openthread-core-nrf52840-config.h입니다.

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 관련 플래그입니다. 모든 로그가 사용 설정된 조인자를 빌드하려면 다음을 실행합니다.
    ./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. 구현에 따라 로그 수준을 변경합니다. <ph type="x-smartling-placeholder">
      </ph>
    1. 단일 칩 시스템 (SoC)의 경우 서비스 내의 Logging API를 OpenThread 애플리케이션
    2. NCP의 경우 명령줄에서 wpanctl를 사용합니다. wpanctl에 노출되는 모든 속성은 wpantund 저장소의 wpan-properties.h에서, 로그 수준 정의는 Spinel API를 참고하세요.
      wpanctl set OpenThread:LogLevel 5