容器日志
概览
本教程演示了如何使用互联网计算机 (IC) 的容器日志功能。
容器日志功能旨在为开发人员提供途径以查看容器行为,并在容器执行发生错误时提供帮助。该功能支持以下日志信息:
- Heartbeats
- 计时器(Timers)
Pre/post
更新脚本 和canister_init
方法- 更新调用
- 查询调用(仅支持在 replicated 模式下执行的查询调用)
即使在执行过程中发生错误,容器的控制者仍然能够使用 dfx canister logs
命令检索容器日志。
要求
- 下载并安装 IC SDK。
创建工程
进入您的工程目录,执行一下命令创建新的 dfx 工程。
dfx new canister_logs
在接下来的步骤中:
- 选择
Rust
作为后端语言; - 选择
No frontend canister
。
从而完成工程创建。
更新工程
这里我们需要将默认代码更新,从而使用容器日志功能。
更新 Rust 代码
请打开 canister_logs
工程目录下的 src/canister_logs_backend/src/lib.rs
文件,并将其代码替换为如下文本:
use std::cell::RefCell;
use ic_cdk::{
export_candid, println,
};
thread_local! {
// create a cell that holds a counter
static COUNTER: std::cell::RefCell<u32> = RefCell::default();
}
#[ic_cdk::update]
fn produce_logs() {
// print the counter value
COUNTER.with_borrow_mut(|counter| {
println!("counter: {}", *counter);
*counter += 1;
});
}
export_candid!();
该代码定义了一个计数器 COUNTER
,并通过 produce_logs
方法更新计数器、并输出日志。
更新 Candid 文件
由于我们更新了容器接口,我们需要更新对应的 candid
文件。请参照该文档 进行更新。
基本步骤如下:
- 执行如下脚本安装
candid-extractor
工具。cargo install candid-extractor
- 执行如下脚本编译容器。
cargo build --release --target wasm32-unknown-unknown --package canister_logs_backend
- 执行如下脚本导出新的 candid 文件。
candid-extractor target/wasm32-unknown-unknown/release/canister_logs_backend.wasm > canister_logs_backend.did
- 替换
src/canister_logs_backend/canister_logs_backend.did
文件。
本地部署
完成代码更新后,您可以执行以下脚本将您的容器部署到 IC 的本地开发环境。
dfx start --background
dfx deploy
如果成功,您将会看到类似如下的输出信息:
...
Deployed canisters.
URLs:
Backend canister via Candid interface:
canister_logs_backend: http://127.0.0.1:4943/?canisterId=a3shf-5eaaa-aaaaa-qaafa-cai&id=asrmz-lmaaa-aaaaa-qaaeq-cai
...
测试
您可以调用 canister_logs_backend
容器的 produce_logs
方法来递增计数器,并获得以下命令行输出:
dfx canister call canister_logs_backend produce_logs
2024-06-04 21:14:25.882276 UTC: [Canister asrmz-lmaaa-aaaaa-qaaeq-cai] counter: 0
()
dfx canister call canister_logs_backend produce_logs
2024-06-04 21:18:18.094003 UTC: [Canister asrmz-lmaaa-aaaaa-qaaeq-cai] counter: 1
()
dfx canister call canister_logs_backend produce_logs
2024-06-04 21:18:46.036022 UTC: [Canister asrmz-lmaaa-aaaaa-qaaeq-cai] counter: 2
()
然后您可以通过 dfx canister logs
查看容器日志:
dfx canister logs canister_logs_backend
[0. 2024-06-04T21:14:25.882276Z]: counter: 0
[1. 2024-06-04T21:18:18.094003Z]: counter: 1
[2. 2024-06-04T21:18:46.036022Z]: counter: 2
以上教程展示了 Rust 中最基本的容器日志用法。您也可以参考 DFINITY 基金会的官方示例、分别查看 Rust 和 Motoko 版本。
有问题么?
欢迎大家随时向我们提出任何技术问题。我们会尽力尽快回应。
上网比较方便的,在
ICP China
的 Twitter Community,用中文发帖提问有经验的开发者在 DFINITY 基金会运营的开发者论坛上用英文提问
infohttps://forum.dfinity.org/ ,可以 cue 我们:Ben,Paul,Vincent ,Herbert。
深度 ICP 用户可以在 OpenChat 上的
IC123.xyz Community
里的频道ic123.xyz 工作组
里提问题欢迎您申请 DFINITY 基金会的 Developer Grant 项目,加入互联网计算机的大家庭!