OpenThread Günlükleri

Kaynağı GitHub'da görüntüle

OpenThread günlükleri, çok sayıda derleme zamanı yapılandırma sabiti tarafından kontrol edilir. Aksi belirtilmedikçe, bu sabit değerler aşağıdaki dosyada tanımlanır:

openthread/src/core/config/logging.h

Çıkış yöntemleri

OpenThread, aşağıdaki şekilde tanımlanan farklı çıkış günlük kaydı yöntemlerini destekler: OPENTHREAD_CONFIG_LOG_OUTPUT için derleme süresi yapılandırma sabiti. İlgili içeriği oluşturmak için kullanılan günlük yöntemi seçenekleri aşağıdaki dosyada listelenmiştir:

openthread/src/core/config/logging.h

Varsayılan günlük çıkışı yapılandırması: OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED

Çıkış yöntemi, temel yapılandırma sabiti yerine platform düzeyinde yapılandırma sabiti olarak kabul edilir. Örneğin, simülasyon örnek uygulamasında çıkış yöntemini değiştirin, -openthread/examples/platforms/simulation/openthread-core-simulation-config.h openthread/src/core/config/logging.h.

Günlük seviyeleri

Günlükler, derleme süresi olarak tanımlanan farklı düzeylerde bilgiler verebilir OPENTHREAD_CONFIG_LOG_LEVEL yapılandırma sabitidir. Seviye seçenekleri: aşağıdaki dosyada listelenmiştir:

openthread/include/openthread/platform/logging.h

Günlük düzeylerinin listesi Platform Logging Makroları API referansı.

Varsayılan günlük düzeyi OT_LOG_LEVEL_CRIT olup yalnızca en çok kritik günlükler. İstediğiniz gibi daha fazla günlük görmek için düzeyi değiştirin. Tümünü görmek için OpenThread günlüklerini kullanın: OT_LOG_LEVEL_DEBG.

Bölgeleri günlüğe kaydet

Günlük bölgeleri, OpenThread kodunun hangi alanları için etkinleştirildiğini belirler günlük kaydı. Bölge numaralandırması aşağıdaki dosyada tanımlanır:

openthread/include/openthread/platform/logging.h

Günlük bölgeleri listesi, Platform Logging Enumerations API referansı.

Günlük bölgeleri, günlük işlevlerinde parametre olarak yaygın olarak kullanılır. Tüm bölgeler varsayılan olarak etkindir.

Varsayılan günlük kaydı işlevi

OpenThread içinde günlük kaydı için varsayılan işlev otPlatLog şeklindedir ve derleme zamanı yapılandırma sabiti OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

Platform Logging API'yi inceleyin bu işlev hakkında daha fazla bilgi için referans bölümüne bakın.

Bu işlevi doğrudan OpenThread örnek uygulamalarında kullanmak için OT_REFERENCE_DEVICE cmake seçeneğini kullanabilirsiniz. Örneğin, bunu CC2538 örneğine ilişkin KSA uygulamasında kullanmak için:

./script/build -DOT_REFERENCE_DEVICE=ON

Alternatif olarak, oluşturma sırasında varsayılan olarak etkinleştirmek için openthread/etc/cmake/options.cmake dosyasını güncelleyin.

Günlükler nasıl etkinleştirilir?

Günlükleri etkinleştirmeden önce ortamınızın derleme işlemleri için yapılandırıldığından emin olun. OpenThread. Daha fazla bilgi için OpenThread oluşturma bölümüne bakın.

Tüm günlükleri etkinleştir

Tüm günlük düzeylerini ve bölgeleri hızlı bir şekilde etkinleştirmek için OT_FULL_LOGS cmake seçeneğini kullanın:

./script/build -DOT_FULL_LOGS=ON

Bu anahtar, günlük düzeyini OT_LOG_LEVEL_DEBG olarak ayarlar ve tüm bölgeyi etkinleştirir işaretidir.

Belirli bir düzeyde günlük etkinleştirme

Belirli bir düzeyde günlük etkinleştirmek için openthread/src/core/config/logging.h dosyasını düzenleyip güncelleyin. OPENTHREAD_CONFIG_LOG_LEVEL öğesini istediğiniz düzeye getirip OpenThread oluşturun. Örneğin, örnek, OT_LOG_LEVEL_INFO tarihine kadar olan günlükleri etkinleştirmek için:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Günlükleri sistem günlüğünde görüntüle

Günlükler varsayılan olarak syslog cihazına gönderilir. Linux'ta bu /var/log/syslog.

  1. Tüm günlükler etkinleştirilerek simülasyon örneğini oluşturun:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
    .
  2. Düğüm simülasyonu başlatın:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
    .
  3. Yeni bir terminal penceresinde OT günlüklerinin gerçek zamanlı çıkışını ayarlayın:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
    .
  4. Simüle edilen düğümde Thread'i açın:
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 komutunu çalıştıran terminal penceresine geri dönün. Günlükler şunun için gerçek zamanlı olarak görüntülenmelidir: simüle edilen düğüm. Çıkıştaki günlük etiketlerine dikkat edin: [INFO], [DEBG], [NOTE]. Bunların tümü günlük düzeylerine. Örneğin, günlük düzeyini OT_LOG_LEVEL_INFO olarak değiştirirseniz DEBG günlükleri çıkıştan kaybolur.

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)

Günlükleri CLI uygulamasında görüntüle

Günlükler doğrudan OpenThread CLI örnek uygulamasında görüntülenebilir.

  1. Örnek platformun yapılandırma dosyasını düzenleyin ve günlüğü değiştirin çıkış olarak ekleyebilirsiniz. Simülasyon örneğinde openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. İstediğiniz günlük düzeyinde simülasyon örneğini oluşturun. Tümünü etkinleştirmek için günlükler:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
    .
  3. Düğüm simülasyonu başlatın:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
    .
  4. Günlük çıkışını OpenThread CLI ile aynı pencerede görürsünüz: komutlar işlenir.

Özel günlük kaydı eklediyseniz ve tüm günlükleri etkinleştirdiyseniz, CLI satır arabelleği veya UART iletimi arabellek, ek özel günlükleri işleyecek kadar büyük olmayabilir. Bazı günlükler görünmesi için KSA satırının boyutunu artırmayı deneyin. arabellek, şurada OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH olarak tanımlanır: /openthread/src/cli/cli_config.h ya da UART iletim arabelleğinin boyutunu artırmak, OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE gibi, platformun yapılandırma dosyasındaki /src/nrf52840/openthread-core-nrf52840-config.h.

NCP günlüklerini görüntüleme

Bir NCP'nin günlükleri, wpantund aracılığıyla ana makinenin syslog kısmına gönderilebilir. Örneğin, Linux ana makinesi, bu /var/log/syslog.

Şu değeri kullanın: OPENTHREAD_CONFIG_LOG_OUTPUT NCP günlük kaydını etkinleştirmek için OPENTHREAD_CONFIG_LOG_OUTPUT_APP. Bunu şurada değiştirin: platformun yapılandırma dosyası olabilir.

Örneğin, bunu bir Linux ana makinesine bağlı nrf52840 için etkinleştirmek üzere:

  1. Platformun yapılandırma dosyasını düzenleyin ve günlük çıkışını görebilirsiniz. nrf52840 için bu ot-nrf528xx deposunda ./src/nrf52840/openthread-core-nrf52840-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. nrf52840 örneğini istediğiniz günlük kaydı ve diğer düzey NCP'ye özel işaretler. Tüm günlüklerin etkin olduğu bir birleştirici oluşturmak için:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
    .
  3. NCP'yi güncelleyin, Linux ana makinesine bağlayın ve wpantund öğesini şu şekilde başlatın: wpantund deposunda bulabilirsiniz.

  4. NCP çalışmaya başladıktan sonra Linux makinesinde syslog öğesini kontrol edin:

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

  5. OpenThread günlüklerinin NCP için gerçek zamanlı olarak görüntülendiğini görürsünüz. bunları wpantund çıkışında da görebilirsiniz.

Çalışma zamanında günlük düzeyini değiştirme

Dinamik günlük düzeyi kontrolü etkinse çalışma sırasında günlük düzeyleri değiştirilebilir.

  1. Uygulamayı -DOT_LOG_LEVEL_DYNAMIC=ON seçeneğiyle oluşturun. Örneğin,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
    .
  2. Uygulamanıza bağlı olarak günlük düzeyini değiştirin:
    1. Çip üzerinde sistem (SoC) için Logging API'yi OpenThread uygulaması.
    2. NCP için komut satırında wpanctl kullanın. wpanctl ve Spinel API kapsamındaki tüm özelliklerin günlük düzeyi tanımları için wpantund deposundaki wpan-properties.h bölümüne bakın.
      wpanctl set OpenThread:LogLevel 5