OpenThread Günlükleri

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

OpenThread günlükleri, derleme zamanındaki birçok yapılandırma sabitiyle kontrol edilir. Aksi belirtilmedikçe 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ük kaydı yöntemlerini destekler. Günlük kaydı 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ı şu şekildedir: OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

Çıkış yöntemi, temel yapılandırma sabitinin yerine platform düzeyindeki yapılandırma sabitini güncellemeniz gerekebileceği 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 değerini düzenleyin.

Günlük seviyeleri

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

openthread/include/openthread/platform/logging.h

Günlük düzeylerinin listesi Platform Günlük Kaydetme Makroları API referansında da mevcuttur.

Varsayılan günlük düzeyi, yalnızca en kritik günlükleri veren OT_LOG_LEVEL_CRIT'dir. İstediğiniz kadar 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 simgesini kullanın.

Bölgeleri günlüğe kaydet

Günlük bölgeleri, OpenThread kodunun hangi alanlarının günlük kaydı için etkinleştirileceğ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 Günlük Kaydetme Tanımlamaları API referansında da mevcuttur.

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'de günlük kaydı için varsayılan işlev otPlatLog şeklindedir. Bu işlev, OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION işleminin derleme süresi 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 CLI uygulamasında kullanmak üzere:

./script/build -DOT_REFERENCE_DEVICE=ON

Alternatif olarak, derleme sırasında varsayılan olarak etkinleştirilecek şekilde 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şturmak için yapılandırıldığından emin olun. Daha fazla bilgi için OpenThread oluşturma bölümüne bakın.

Tüm günlükleri etkinleştirme

Tüm günlük düzeylerini ve bölgelerini 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 düzeyde günlük etkinleştirmek için openthread/src/core/config/logging.h öğesini düzenleyin ve OPENTHREAD_CONFIG_LOG_LEVEL uygulamasını istediğiniz düzeye güncelleyin, ardından OpenThread oluşturun. Örneğin, OT_LOG_LEVEL_INFO'e kadarki 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 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. Simülasyonlu bir düğüm 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ülasyonlu düğümde İleti dizisi'ni 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, simüle edilen düğüm için gerçek zamanlı olarak görüntülenmelidir. Çı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 çıktıdan kaldırılır.

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 uygulamaya giden günlük çıkışını değiştirin. Simülasyon örneği için bu 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 günlükleri etkinleştirmek için:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Simülasyonlu bir düğüm başlatın:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Komutlar işlenirken OpenThread CLI ile aynı pencerede günlük çıkışını görürsünüz.

Ö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 gerektiği gibi görünmüyorsa /openthread/src/cli/cli_config.h'te OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH olarak tanımlanan CLI satır arabelleğinin boyutunu veya platformun yapılandırma dosyasında /src/nrf52840/openthread-core-nrf52840-config.h gibi OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE olarak tanımlanan UART aktarım arabelleğinin boyutunu artırmayı deneyin.

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

NCP'nin günlükleri, wpantund üzerinden bir ana makinenin syslog adresine gönderilebilir. Bir Linux ana makinesi için bu, /var/log/syslog.

NCP günlük kaydını etkinleştirmek için OPENTHREAD_CONFIG_LOG_OUTPUT değerini OPENTHREAD_CONFIG_LOG_OUTPUT_APP olarak kullanın. Bunu platformun yapılandırma dosyasında değiştirin.

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

  1. Platformun yapılandırma dosyasını düzenleyin ve günlük çıkışını uygulamaya değiştirin. nrf52840 için bu, ot-nrf528xx deposundaki ./src/nrf52840/openthread-core-nrf52840-config.h dosyasıdır:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. nrf52840 örneğini, istediğiniz günlük düzeyinde ve NCP'ye özgü diğer işaretlerle derleyin. 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 flaşlayın, Linux ana makinesine bağlayın ve wpantund'yi wpantund deposunda açıklandığı şekilde başlatın.

  4. NCP çalışmaya başladıktan sonra Linux makinesinde syslog dosyasını 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. Bu değerleri 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. Günlük düzeyini uygulamanıza bağlı olarak değiştirin:
    1. Yonga üzerinde sistem (SoC) için OpenThread uygulamanızda Logging API'yi kullanın.
    2. NCP için komut satırında wpanctl kullanın. wpanctl'e sunulan tüm özellikler için wpantund deposundaki wpan-properties.h dosyasına, günlük düzeyi tanımları için de Spinel API'ye bakın.
      wpanctl set OpenThread:LogLevel 5