OpenThread Günlükleri

Kaynağı GitHub'da göster

OpenThread günlükleri çok sayıda derleme zamanı yapılandırma sabitiyle 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, OPENTHREAD_CONFIG_LOG_OUTPUT için 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 listelenir:

openthread/src/core/config/logging.h

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

Çıkış yöntemi, temel olan yerine platform düzeyinde yapılandırma sabitini güncellemeniz gerekebilecek bir örnektir. Örneğin, simülasyon örnek 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'ın derleme zamanı yapılandırma sabiti olarak tanımlanan çeşitli bilgi çıkışları oluşturabilir. Seviye seçenekleri aşağıdaki dosyada listelenmiştir:

openthread/include/openthread/platform/logging.h

Günlük düzeylerinin listesini Platform Logging Makroları API referansında da bulabilirsiniz.

Varsayılan günlük düzeyi, yalnızca en kritik günlüklerin çıkışını veren OT_LOG_LEVEL_CRIT değeridir. İstediğiniz kadar günlük görmek için düzeyi değiştirin. Tüm OpenThread günlüklerini görmek için OT_LOG_LEVEL_DEBG politikasını kullanın.

Bölgeleri günlüğe kaydet

Günlük bölgeleri, günlük kaydı için OpenThread kodunun hangi alanlarının 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 Log enumerations API referansında da mevcuttur.

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

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

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

Bu işlev hakkında daha fazla bilgi edinmek 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, 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 derlemesi için yapılandırıldığından emin olun. Daha fazla bilgi için OpenOpenThread oluştur bölümüne bakın.

Tüm günlükleri etkinleştir

Tüm günlük seviyeleri ve bölgeleri hızlıca 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 düzeyde günlük kaydını etkinleştirme

Belirli bir düzeyde günlük kaydını etkinleştirmek için openthread/src/core/config/logging.h dosyasını düzenleyip OPENTHREAD_CONFIG_LOG_LEVEL alanını istediğiniz düzeye güncelleyin, ardından OpenThread kodunu oluşturun. Örneğin, en fazla OT_LOG_LEVEL_INFO günlük kaydını etkinleştirmek için:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Sistem günlüğündeki günlükleri görüntüleme

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

  1. Tüm günlükler etkin haldeyken simülasyon örneğini oluşturun:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Simülasyon simülasyonu 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ı oluşturun:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Simüle edilen düğümde İleti dizisini 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österilir. Çıkıştaki günlük etiketlerini not 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 CLI uygulamasında görüntüleyin

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 çıktısını uygulamaya değiştirin. Simülasyon örneği için bu şöyledir: 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üzeyiyle 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ülasyon simülasyonu düğümü başlatın:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Günlük çıktısı, komutlar işlenirken OpenThread KSA ile aynı pencerede gösterilir.

Özel günlük kaydı ekleyip tüm günlükleri etkinleştirdiyseniz CLI satırı arabelleği veya UART aktarım arabelleği, ek özel günlükleri işleyebilecek kadar büyük olmayabilir. Gerektiğinde bazı günlükler görünmüyorsa CLI satır arabelleğinin boyutunu (/openthread/src/cli/cli_config.h ile OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH şeklinde tanımlanır) veya platformun yapılandırma dosyasında OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE şeklinde tanımlanan UART aktarım arabelleğinin boyutunu (/src/nrf52840/openthread-core-nrf52840-config.h gibi) artırmayı deneyin.

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

NCP günlükleri, wpantund yoluyla bir ana makinenin syslog adresine gönderilebilir. Bu, bir Linux ana makinesi için /var/log/syslog.

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

Örneğin, bir 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 çıktısını uygulamaya değiştirin. nrf52840 kod deposunda ot-nrf528xx deposundaki ./src/nrf52840/openthread-core-nrf52840-config.h bulunmaktadır:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. nrf52840 örneğini istediğiniz günlük düzeyi ve NCP'ye özgü diğer işaretlerle oluşturun. Tüm günlüklerin etkin olduğu bir toplayıcı oluşturmak için:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. NCP'yi Flash'a ekleyin, Linux ana makineye bağlayın ve wpantund deposunda ayrıntıları verilen şekilde wpantund başlatın.

  4. NCP çalışmaya başladıktan sonra, Linux makinesinde syslog bölümüne bakın:

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

  5. OpenCP günlüklerinin NCP için gerçek zamanlı olarak görüntülenmesi gerekir. 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 denetimi etkinleştirilirse günlük düzeyleri, çalıştırma sırası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. Uygulamanıza bağlı olarak günlük düzeyini değiştirin:
    1. Çip sistemi (SoC) için OpenThread uygulamanızdaki Logging API'yi kullanın.
    2. NCP için komut satırında wpanctl kullanın. wpanctl maruz kalan tüm mülkler için wpantund veri havuzunda wpan-properties.h, günlük düzeyinde tanımları için ise Spinel API'yi inceleyin.
      wpanctl set OpenThread:LogLevel 5