OpenThread Günlükleri

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

OpenThread günlükleri, derleme zamanı yapılandırma sabitleri tarafından kontrol edilir. Aksi belirtilmediği sürece bu sabitler aşağıdaki dosyada tanımlanır:

openthread/src/core/config/logging.h

Çıkış yöntemleri

OpenThread, OPENTHREAD_CONFIG_LOG_OUTPUT derleme zamanı yapılandırma sabiti olarak tanımlanan farklı çıkış günlüğü yöntemlerini destekler. Günlüğe kaydetme 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'dır.

Çıkış yöntemi, temel sabit yerine platform düzeyindeki yapılandırma sabitini güncellemeniz gerekebilecek bir örnektir. Örneğin, simülasyon örneği uygulamasında çıkış yöntemini değiştirmek için openthread/src/core/config/logging.h yerine openthread/examples/platforms/simulation/openthread-core-simulation-config.h öğesini düzenleyin.

Günlük seviyeleri

Günlükler, OPENTHREAD_CONFIG_LOG_LEVEL derleme zamanı yapılandırma sabiti olarak tanımlanan farklı bilgi düzeyleri çıkışı verebilir. Seviye seçenekleri aşağıdaki dosyada listelenmiştir:

openthread/include/openthread/platform/logging.h

Günlük düzeylerinin listesi Platform Logging Macros API referansında da mevcuttur.

Varsayılan günlük düzeyi OT_LOG_LEVEL_CRIT'dır ve yalnızca en kritik günlükleri verir. İstediğiniz gibi daha fazla günlük görmek için seviyeyi değiştirin. Tüm OpenThread günlüklerini görmek için OT_LOG_LEVEL_DEBG kullanın.

Günlük bölgeleri

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

openthread/include/openthread/platform/logging.h

Günlük bölgelerinin listesi Platform Logging Enumerations API referansında da mevcuttur.

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

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

OpenThread'de günlük kaydı için varsayılan işlev otPlatLog'dır ve OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION'nin derleme zamanı yapılandırma sabiti olarak tanımlanır.

Bu işlev hakkında daha fazla bilgi için Platform Logging API referansına bakın.

Bu işlevi doğrudan OpenThread örnek uygulamalarında kullanmak için OT_REFERENCE_DEVICE cmake seçeneğini kullanın. Örneğin, CC2538 örneği için KSA uygulamasında kullanmak üzere:

./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ükleri etkinleştirme

Günlükleri etkinleştirmeden önce ortamınızın OpenThread oluşturmaya uygun şekilde yapılandırıldığından emin olun. Daha fazla bilgi için OpenThread'i oluşturma başlıklı makaleyi inceleyin.

Tüm günlükleri etkinleştirme

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ölge işaretlerini etkinleştirir.

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

Belirli bir günlük düzeyini etkinleştirmek için openthread/src/core/config/logging.h değerini düzenleyin ve OPENTHREAD_CONFIG_LOG_LEVEL değerini istediğiniz düzeyle güncelleyin, ardından OpenThread'i oluşturun. Örneğin, OT_LOG_LEVEL_INFO'ya kadar günlükleri etkinleştirmek için:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Günlükleri syslog'da görüntüleme

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

  1. Tüm günlükler etkinleştirilmiş şekilde simülasyon örneğini oluşturun:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Simüle edilmiş bir düğüm başlatma:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. Yeni bir terminal penceresinde OT günlüklerinin anlık çıkışını ayarlayın:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Simüle edilmiş 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 komutunun çalıştırıldığı terminal penceresine geri dönün. Günlükler, simüle edilmiş düğüm için gerçek zamanlı olarak gösterilmelidir. Çıkıştaki günlük etiketlerine dikkat edin: [INFO], [DEBG], [NOTE]. Bunların tümü günlük düzeylerine karşılık gelir. Ö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 KSA uygulamasında görüntüleme

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ük çıkışını uygulamaya yönlendirin. Simülasyon örneği için bu openthread/examples/platforms/simulation/openthread-core-simulation-config.h'dır:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Simülasyon örneğini istediğiniz günlük düzeyinde oluşturun. Tüm günlükleri etkinleştirmek için:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Simüle edilmiş bir düğüm başlatma:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Komutlar işlenirken OpenThread CLI ile aynı pencerede günlük çıkışı görmeniz gerekir.

Özel günlük kaydı eklediyseniz ve tüm günlükleri etkinleştirdiyseniz CLI satır arabelleği veya UART iletim arabelleği, ek özel günlükleri işlemek için yeterince büyük olmayabilir. Bazı günlükler görünmesi gerektiği halde görünmüyorsa /openthread/src/cli/cli_config.h içinde OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH olarak tanımlanan CLI satır arabelleğinin boyutunu veya /src/nrf52840/openthread-core-nrf52840-config.h gibi platformun yapılandırma dosyasında OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE olarak tanımlanan UART iletim arabelleğinin boyutunu artırmayı deneyin.

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

Dinamik günlük düzeyi kontrolü etkinleştirilmişse günlük düzeyleri çalışma zamanında 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. OpenThread uygulamanızda Logging API'yi kullanın.