docs/src/5.x/mini-program/realtime_log.md
小程序实时日志功能允许开发者查询小程序的实时运行日志,帮助定位和解决线上问题。
$realtimeLog = $app->realtime_log;
查询指定时间段内的实时日志:
$result = $realtimeLog->search(
'20230601', // 日期,格式:yyyymmdd
1685577600, // 开始时间戳(秒)
1685581200, // 结束时间戳(秒)
[
'module' => 'default', // 模块名,可选
'keyword' => 'error', // 关键词过滤,可选
'level' => 'error', // 日志级别过滤,可选
'page_size' => 20, // 每页数量,默认20,最大100
'page_num' => 1 // 页码,从1开始
]
);
参数说明:
date string 查询日期,格式:yyyymmddbeginTime int 开始时间戳(秒)endTime int 结束时间戳(秒)options array 可选参数
module string 模块名过滤keyword string 关键词过滤level string 日志级别过滤(info、warn、error)page_size int 每页数量,默认20,最大100page_num int 页码,从1开始返回结果:
{
"errcode": 0,
"errmsg": "ok",
"data": [
{
"timestamp": 1685577660,
"level": "error",
"module": "default",
"message": "网络请求失败",
"stack": "Error: request timeout\n at ...",
"page": "pages/index/index",
"function": "onLoad",
"line": 25
}
],
"total": 156,
"page_num": 1,
"page_size": 20
}
use EasyWeChat\Factory;
$config = [
'app_id' => 'your-app-id',
'secret' => 'your-app-secret',
// ...
];
$app = Factory::miniProgram($config);
$realtimeLog = $app->realtime_log;
// 查询最近1小时的错误日志
$endTime = time();
$beginTime = $endTime - 3600; // 1小时前
$date = date('Ymd', $endTime);
$result = $realtimeLog->search($date, $beginTime, $endTime, [
'level' => 'error',
'page_size' => 50
]);
if ($result['errcode'] === 0) {
echo "总共找到 {$result['total']} 条错误日志\n";
foreach ($result['data'] as $log) {
echo "时间:" . date('Y-m-d H:i:s', $log['timestamp']) . "\n";
echo "页面:{$log['page']}\n";
echo "消息:{$log['message']}\n";
echo "堆栈:{$log['stack']}\n";
echo "---\n";
}
}
// 查询包含"支付"关键词的日志
$result = $realtimeLog->search($date, $beginTime, $endTime, [
'keyword' => '支付',
'page_size' => 30
]);
if ($result['errcode'] === 0) {
foreach ($result['data'] as $log) {
echo "级别:{$log['level']}\n";
echo "消息:{$log['message']}\n";
echo "页面:{$log['page']}\n";
echo "---\n";
}
}
$pageNum = 1;
$pageSize = 20;
do {
$result = $realtimeLog->search($date, $beginTime, $endTime, [
'page_num' => $pageNum,
'page_size' => $pageSize
]);
if ($result['errcode'] === 0 && !empty($result['data'])) {
echo "第 {$pageNum} 页:\n";
foreach ($result['data'] as $log) {
echo "- {$log['message']}\n";
}
$pageNum++;
// 检查是否还有更多页
$hasMore = ($pageNum - 1) * $pageSize < $result['total'];
} else {
$hasMore = false;
}
} while ($hasMore);
// 查询自定义模块的日志
$result = $realtimeLog->search($date, $beginTime, $endTime, [
'module' => 'payment', // 假设你在小程序中定义了payment模块
'level' => 'warn'
]);
if ($result['errcode'] === 0) {
echo "支付模块警告日志:\n";
foreach ($result['data'] as $log) {
echo "时间:" . date('Y-m-d H:i:s', $log['timestamp']) . "\n";
echo "函数:{$log['function']}\n";
echo "行号:{$log['line']}\n";
echo "消息:{$log['message']}\n\n";
}
}
要使用实时日志功能,需要在小程序端进行相应配置:
在小程序的 app.js 中:
App({
onLaunch() {
// 开启实时日志
const logger = wx.getRealtimeLogManager();
// 设置日志级别
logger.setFilterMsg('test');
// 记录日志
logger.info('应用启动');
}
});
在需要记录日志的地方:
const logger = wx.getRealtimeLogManager();
// 记录信息日志
logger.info('用户操作', { action: 'click', button: 'submit' });
// 记录警告日志
logger.warn('网络慢', { latency: 2000 });
// 记录错误日志
logger.error('请求失败', error);