Linux 上截取大文件日志信息并下载到本地的脚本
复制为 Markdown在服务器上,常常一个后端程序的日志文件多达 5~10GB,在遇到系统宕机或其它难以排查的意外情况时,需要将最近一段时间的日志信息下载到本地,分析原因或者上传到日志平台保存。
假设日志文件中的每一行开头都有一个形如 “2026-02-11 11:49:07.358” 的 YYYY-MM-DD HH:MM:SS.mmm 格式的时间戳。
截取最近 30 分钟的日志信息
可以用下面的脚本截取最近 30 分钟的日志并单独保存为文件:
sh
#!/bin/bash
# 计算半小时前的时间戳(秒)
THRESHOLD_SEC=$(date -d '30 minutes ago' +%s)
# 定义日志文件路径
LOG_FILE="./tomcat_spring.log"
echo "正在查找 $LOG_FILE 中最近 30 分钟的日志..."
# 使用 here document 将 awk 脚本传递给 awk 命令
awk -v thresh="$THRESHOLD_SEC" -v log_file="$LOG_FILE" '
BEGIN {
# 可以在这里添加初始化代码,如果需要的话
}
{
# 提取每行开头的 "YYYY-MM-DD HH:MM:SS" 部分
# 日志格式是 "YYYY-MM-DD HH:MM:SS.mmm ...",所以前19个字符是 "YYYY-MM-DD HH:MM:SS"
datetime_part = substr($0, 1, 19)
# 使用系统 date 命令将该字符串转换为秒数进行比较
# 注意:这里必须使用双引号,并且内部的双引号需要转义
cmd = "date -d \"" datetime_part "\" +%s 2>/dev/null"
cmd | getline log_time_sec
close(cmd)
# 如果解析成功且日志时间 >= 半小时前的时间,则打印该行
if (log_time_sec != "" && log_time_sec >= thresh) {
print $0
}
}
' "$LOG_FILE" > recent_30min_log.txt
echo "提取完成,结果已保存到 recent_30min_log.txt"
然后将其下载到本地:
sh
scp your_username@your_server_ip:/path/to/recent_30min_log.txt /local/path/on/your/computer/
截取当天的堆栈信息
sh
grep "^2026-02-11 " /path/to/your/app.log > today_log.txt
最热文章
本站文章遵循 Apache 2.0 开源协议,转载请注明出处,商业化出版请联系本站管理员(页面底部)
鄂公网安备42098402000265号