Nhật ký OpenThread được kiểm soát bởi nhiều hằng số cấu hình tại thời điểm biên dịch. Trừ phi có ghi chú khác, các hằng số này được xác định trong tệp sau:
openthread/src/core/config/logging.h
Phương thức đầu ra
OpenThread hỗ trợ nhiều phương thức ghi nhật ký đầu ra, được xác định là hằng số cấu hình thời gian biên dịch của OPENTHREAD_CONFIG_LOG_OUTPUT
. Các tuỳ chọn phương thức ghi nhật ký được liệt kê trong tệp sau:
openthread/src/core/config/logging.h
Cấu hình đầu ra nhật ký mặc định là OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED
.
Phương thức đầu ra là ví dụ về trường hợp bạn có thể cần cập nhật hằng số cấu hình cấp nền tảng thay vì hằng số cấu hình cấp cốt lõi. Ví dụ: để thay đổi phương thức đầu ra trong ứng dụng ví dụ về mô phỏng, hãy chỉnh sửa openthread/examples/platforms/simulation/openthread-core-simulation-config.h
thay vì openthread/src/core/config/logging.h
.
Các cấp độ nhật ký
Nhật ký có thể xuất ra nhiều cấp độ thông tin, được xác định là hằng số cấu hình thời gian biên dịch của OPENTHREAD_CONFIG_LOG_LEVEL
. Các tuỳ chọn cấp được liệt kê trong tệp sau:
openthread/include/openthread/platform/logging.h
Danh sách các cấp độ nhật ký cũng có trong tài liệu tham khảo API Macro ghi nhật ký nền tảng.
Cấp độ nhật ký mặc định là OT_LOG_LEVEL_CRIT
, chỉ xuất ra các nhật ký quan trọng nhất. Thay đổi cấp để xem thêm nhật ký nếu muốn. Để xem tất cả các nhật ký OpenThread, hãy sử dụng OT_LOG_LEVEL_DEBG
.
Vùng nhật ký
Vùng nhật ký xác định những vùng trong mã OpenThread được bật để ghi nhật ký. Liệt kê khu vực được xác định trong tệp sau:
openthread/include/openthread/platform/logging.h
Danh sách các vùng nhật ký cũng có trong tài liệu tham khảo API Platform Logging Enumerations (Danh sách liệt kê nhật ký nền tảng).
Vùng nhật ký thường được dùng làm tham số trong các hàm nhật ký. Theo mặc định, tất cả các khu vực đều được bật.
Hàm ghi nhật ký mặc định
Hàm mặc định để ghi nhật ký trong OpenThread là otPlatLog
, được xác định là hằng số cấu hình tại thời điểm biên dịch của OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION
.
Hãy xem tài liệu tham khảo về API Ghi nhật ký nền tảng để biết thêm thông tin về hàm này.
Để sử dụng trực tiếp hàm này trong các ứng dụng mẫu OpenThread, hãy sử dụng tuỳ chọn cmake OT_REFERENCE_DEVICE
. Ví dụ: để sử dụng trong ứng dụng CLI cho ví dụ CC2538:
./script/build -DOT_REFERENCE_DEVICE=ON
Ngoài ra, hãy cập nhật tệp openthread/etc/cmake/options.cmake
để bật tệp đó theo mặc định khi tạo.
Cách bật nhật ký
Trước khi bật nhật ký, hãy đảm bảo môi trường của bạn được định cấu hình để tạo OpenThread. Hãy xem phần Tạo OpenThread để biết thêm thông tin.
Bật tất cả nhật ký
Để nhanh chóng bật tất cả các cấp độ nhật ký và khu vực, hãy sử dụng tuỳ chọn cmake OT_FULL_LOGS
:
./script/build -DOT_FULL_LOGS=ON
Nút chuyển này đặt cấp độ nhật ký thành OT_LOG_LEVEL_DEBG
và bật tất cả cờ khu vực.
Bật một cấp độ nhật ký cụ thể
Để bật một cấp độ nhật ký cụ thể, hãy chỉnh sửa openthread/src/core/config/logging.h
và cập nhật OPENTHREAD_CONFIG_LOG_LEVEL
lên cấp độ mong muốn, sau đó tạo OpenThread. Ví dụ: để bật nhật ký lên đến OT_LOG_LEVEL_INFO
:
#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build
Xem nhật ký trong syslog
Theo mặc định, nhật ký được gửi đến syslog
. Trên Linux, đây là /var/log/syslog.
- Tạo ví dụ mô phỏng với tất cả nhật ký được bật:
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Bắt đầu một nút được mô phỏng:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- Trong cửa sổ dòng lệnh mới, hãy thiết lập đầu ra theo thời gian thực của nhật ký OT:
tail -F /var/log/syslog | grep "ot-cli-ftd"
- Trên nút được mô phỏng, hãy hiển thị Luồng:
dataset init new
Donedataset
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 Donedataset commit active
Doneifconfig up
Donethread start
Done
Chuyển về cửa sổ dòng lệnh đang chạy lệnh tail
. Nhật ký phải hiển thị theo thời gian thực cho nút mô phỏng. Lưu ý các thẻ nhật ký trong kết quả: [INFO]
, [DEBG]
, [NOTE]
. Tất cả các cấp độ này tương ứng với cấp độ nhật ký. Ví dụ: nếu bạn thay đổi cấp độ nhật ký thành OT_LOG_LEVEL_INFO
, thì nhật ký DEBG
sẽ biến mất khỏi kết quả.
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)
Xem nhật ký trong ứng dụng CLI
Bạn có thể xem nhật ký ngay trong ứng dụng ví dụ về OpenThread CLI.
- Chỉnh sửa tệp cấu hình cho nền tảng mẫu và thay đổi đầu ra nhật ký thành ứng dụng. Đối với ví dụ mô phỏng, đây là
openthread/examples/platforms/simulation/openthread-core-simulation-config.h
:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- Tạo ví dụ mô phỏng với cấp độ nhật ký mong muốn. Cách bật tất cả nhật ký:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Bắt đầu một nút được mô phỏng:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- Bạn sẽ thấy kết quả nhật ký trong cùng một cửa sổ với OpenThread CLI khi các lệnh được xử lý.
Nếu bạn đã thêm tính năng ghi nhật ký tuỳ chỉnh và bật tất cả nhật ký, thì vùng đệm dòng CLI hoặc vùng đệm truyền UART có thể không đủ lớn để xử lý các nhật ký tuỳ chỉnh bổ sung. Nếu một số nhật ký không xuất hiện khi cần, hãy thử tăng kích thước của vùng đệm dòng CLI, được xác định là OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH
trong /openthread/src/cli/cli_config.h
hoặc tăng dung lượng bộ đệm truyền UART, được xác định là OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE
trong tệp cấu hình của nền tảng, chẳng hạn như /src/nrf52840/openthread-core-nrf52840-config.h
.
Xem nhật ký cho một NCP
Nhật ký cho một NCP có thể được gửi thông qua wpantund
đến syslog
của máy chủ. Đối với máy chủ Linux, đây là /var/log/syslog.
Sử dụng giá trị OPENTHREAD_CONFIG_LOG_OUTPUT
là OPENTHREAD_CONFIG_LOG_OUTPUT_APP
để bật tính năng ghi nhật ký NCP. Thay đổi thông tin này trong tệp cấu hình của nền tảng.
Ví dụ: để bật tính năng này cho nrf52840 được kết nối với máy chủ Linux:
- Chỉnh sửa tệp cấu hình cho nền tảng và thay đổi đầu ra nhật ký thành ứng dụng. Đối với nrf52840, đây là
./src/nrf52840/openthread-core-nrf52840-config.h
trong kho lưu trữ ot-nrf528xx:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- Tạo ví dụ nrf52840 với cấp độ nhật ký mong muốn và các cờ khác dành riêng cho NCP. Cách tạo một trình kết hợp với tất cả nhật ký được bật:
./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
Cài đặt ROM cho NCP, kết nối với máy chủ Linux và khởi động
wpantund
như mô tả chi tiết trong kho lưu trữ wpantund.Sau khi NCP đang chạy, hãy kiểm tra
syslog
trên máy Linux:tail -F /var/log/syslog | grep "wpantund"
Bạn sẽ thấy nhật ký OpenThread hiển thị theo thời gian thực cho NCP. Bạn cũng có thể thấy các giá trị này trong kết quả
wpantund
.
Thay đổi cấp độ nhật ký trong thời gian chạy
Bạn có thể thay đổi cấp độ nhật ký trong thời gian chạy nếu bật tính năng kiểm soát cấp độ nhật ký động.
- Xây dựng ứng dụng với tuỳ chọn
-DOT_LOG_LEVEL_DYNAMIC=ON
. Ví dụ:./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- Thay đổi cấp độ nhật ký tuỳ thuộc vào cách triển khai:
- Đối với hệ thống trên chip (SoC), hãy sử dụng API ghi nhật ký trong ứng dụng OpenThread.
- Đối với NCP, hãy sử dụng
wpanctl
trên dòng lệnh. Xemwpan-properties.h
trong kho lưu trữwpantund
để biết tất cả các thuộc tính hiển thị vớiwpanctl
và API Spinel để biết định nghĩa về cấp độ nhật ký.wpanctl set OpenThread:LogLevel 5