前言
Aria2 的任务记录默认存储在内存中,AriaNg 重启后已完成任务会全部消失。为了让下载历史能够长期保存,可以利用 Aria2 的 event‑hook 机制,在任务完成时自动写入日志文件。
本文提供两个方案:
- 简单方案:直接记录完成时间、GID、文件路径
- 进阶方案:通过 JSON‑RPC 查询更多信息(如文件大小、下载地址)
当前环境:
Aria2 1.37.0
AriaNg 1.3.11
官方文档:event-hook
简单方案:直接写入日志
Aria2 在触发 on-download-complete 时会向脚本传递三个参数:
%1:GID%2:文件数量%3:文件路径
思路:在任务完成时调用批处理脚本,将必要信息写入 history.txt。
1. 修改 aria2.conf
on-download-complete=on-complete-hook.bat
2. 创建 on-complete-hook.bat(放在 aria2.exe 同目录)
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion:: 获取当前时间
set datetime=%date% %time%:: 写入日志
echo [%datetime%] GID=%1 FILE=%3 >> history.txtendlocal
3. 示例输出
[周一 2026/03/02 19:29:44.41] GID=68c9c804983c04fd FILE="F:/Downloads/test.txt"
[周一 2026/03/02 19:33:44.67] GID=8ec7f5f31254dbfb FILE="F:/Downloads/test2.txt"
此方案简单无脑,但只能获取 GID 、文件数量和文件路径3个信息。
进阶方案:通过 JSON‑RPC 获取完整任务信息
如果需要记录 文件大小、下载地址、更多元数据,可以在 hook 中调用 PowerShell,通过 RPC 查询任务详情。
流程:
aria2 → on-complete-hook.bat → on-complete.ps1 → history.txt
1. 修改 aria2.conf
on-download-complete=on-complete-hook.bat
2. 创建 on-complete-hook.bat
@echo off
powershell -ExecutionPolicy Bypass -File "D:\Program Files\Aria2\on-complete.ps1" %1 %2 %3
3. 创建 on-complete.ps1(放在 aria2.exe 同目录)
param([string]$GID,[string]$FileCount,[string]$FilePath
)# ========= 配置 =========
$RpcUrl = "http://127.0.0.1:6800/jsonrpc"
$RpcToken =
$LogFile = "history.txt"
# ========================$Now = Get-Date -Format "yyyy-MM-dd HH:mm:ss"# 构造 JSON 请求
$Body = @{jsonrpc = "2.0"method = "aria2.tellStatus"id = "1"params = @("token:$RpcToken", $GID, @("totalLength","files"))
} | ConvertTo-Json -Depth 5# 调用 RPC
$response = Invoke-RestMethod -Uri $RpcUrl -Method Post -Body $Body -ContentType "application/json"$totalLength = [int64]$response.result.totalLength
$uri = $response.result.files[0].uris[0].uri# 文件大小格式化
function Format-Size($bytes) {if ($bytes -ge 1GB) { return "{0:N2} GB" -f ($bytes / 1GB) }elseif ($bytes -ge 1MB) { return "{0:N2} MB" -f ($bytes / 1MB) }elseif ($bytes -ge 1KB) { return "{0:N2} KB" -f ($bytes / 1KB) }else { return "$bytes B" }
}$sizeText = Format-Size $totalLength# 写入日志
$logText = @"
======================================
GID: $GID
时间: $Now
路径: $FilePath
大小: $sizeText
地址: $uri"@$logText | Out-File -FilePath $LogFile -Encoding Default -Append
4. 示例输出
======================================
GID: 274e3438cfcfc01c
时间: 2026-03-02 19:48:26
路径: F:/Downloads/test.txt
大小: 16 B
地址: https://d.pcs.baidu.com/file/...
这种方法可记录完整下载信息,适合需要长期归档或分析下载历史。
总结
Aria2 的 event‑hook 提供了灵活的扩展能力:
- 简单方案:无需 RPC,快速记录基础信息
- 进阶方案:通过 JSON‑RPC 获取完整任务详情,适合需要更丰富日志的用户
两种方案均适用于 Windows,Linux/macOS 也可以用同样方式实现。
