我想监控应用程序的日志文件,但它不能在本地运行,而是在 SaaS 平台上运行,并通过 HTTP 和 WebDAV 公开。因此,对于 URL 来说,相当于 tail -f 的命令对我来说很管用。
PS 如果您知道任何其他可以通过 HTTP 监控远程文件的工具,也可能会有所帮助。谢谢
答案1
可能有专门的工具可以实现这一点,但你也可以使用 wget 来实现。打开终端并运行以下命令:
while :; do
sleep 2
wget -ca -O log.txt -o /dev/null http://yoursite.com/log
done
这将每两秒下载一次日志文件并将其保存到log.txt
附加到已存在的内容中(-c
表示继续下载,-a
表示将输出附加到给定的文件名)。-o
将错误消息重定向到/dev/null/
。
现在,您有了 log.txt 的本地副本并可以tail -f
在其上运行:
tail -f log.txt
答案2
可以使用带有 range 选项的 curl 与 watch 结合来实现这一点:
范围
HTTP 1.1 引入了字节范围。利用此功能,客户端可以请求仅获取指定文档的一个或多个子部分。Curl 使用 -r 标志支持此功能。
watch -n <interval> 'curl -s -r -<bytes> <url>'
例如
watch -n 30 'curl -s -r -2000 http://yoursite.com/log'
这将每 30 秒检索日志的最后 2000 个字节。
注意:对于自签名 https,请使用 --insecure curl 选项
答案3
我回答过同样的问题这里使用一个完整的 shell 脚本,该脚本将 URL 作为其参数并tail -f
对其进行处理。以下是该答案的逐字副本:
这将做到这一点:
#!/bin/bash
file=$(mktemp)
trap 'rm $file' EXIT
(while true; do
# shellcheck disable=SC2094
curl --fail -r "$(stat -c %s "$file")"- "$1" >> "$file"
done) &
pid=$!
trap 'kill $pid; rm $file' EXIT
tail -f "$file"
它对网络服务器不太友好。你可以用 替换true
以sleep 1
减少资源消耗。
就像,当您观看完输出后,即使输出已经完成,tail -f
您也需要这样做。^C
答案4
我已经创建了一个 powershell 脚本
- 每 20 秒从给定的 url 获取内容
- 使用“Range”HTTP 请求标头仅获取特定数量的数据。
while ($true) {
$request = [System.Net.WebRequest]::Create("https://raw.githubusercontent.com/fascynacja/blog-demos/master/gwt-marquee/pom.xml")
$request.AddRange(-1000)
$response = $request.GetResponse()
$stream = $response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($stream)
$content = $reader.ReadToEnd()
$reader.Close()
$stream.Close()
$response.Close()
Write-Output $content
Start-Sleep -Seconds 20
}
您可以根据自己的需要调整范围和秒数。此外,如果需要,您还可以轻松为特定搜索词添加颜色模式。