CentOS-查询实时报错日志-查询前1天业务报错gz压缩日志

news2025/4/6 7:08:07

最新版本更新
https://code.jiangjiesheng.cn/article/364?from=csdn

推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》

1. 查询实时报错日志

物理路径(带*的放在靠后,或者不用*

cd /home/logs/java-gz-log-dir && tail -2000f java-gz-log-dir-error.log | grep -ivE '(登录失败|不包含|不合法|不匹配|存在|未在系统中|入参无效|没有【生效中】|找不到|重复|JwtToken|已过期|catalina|token 为空|被踢出|Broken pipe|ErrorPage|Servlet\.service\(\) for servlet \[dispatcherServlet\]|无*数据)' | grep -iE -C 30 '(timeout|PSQLException: ERROR|ERROR|失败|EOFException|SocketException|IOException|sql执行出现异常|不判定为缺失)' 

docker版本(带*的放在靠后,或者不用*

docker logs --tail 20000 --follow java-gz-log-dir | grep -ivE '(登录失败|不包含|不合法|不匹配|存在|未在系统中|入参无效|没有【生效中】|找不到|重复|JwtToken|已过期|catalina|token 为空|被踢出|Broken pipe|ErrorPage|Servlet\.service\(\) for servlet \[dispatcherServlet\]|无*数据)' | grep -iE -C 20 '(timeout|PSQLException: ERROR|ERROR|失败|EOFException|SocketException|IOException|sql执行出现异常|监测点|不判定为缺失)'

2. 查询前1天业务报错gz压缩日志

简化版:

cd /home/logs/java-gz-log-dir && [ -d "/home/logs/java-gz-log-dir/lastDayErrorLog" ] || mkdir /home/logs/java-gz-log-dir/lastDayErrorLog && rm -f /home/logs/java-gz-log-dir/lastDayErrorLog/* && echo "开始复制昨天的错误日志文件" && cp $(ls -t java-gz-log-dir-error.log.*.gz | head -1) lastDayErrorLog && cd ./lastDayErrorLog && echo "开始解压错误日志文件" && gunzip *.gz && echo "开始查找错误日志文件内容" && cat * | grep -ivE '(登录失败|不包含|不合法|不匹配|存在|未在系统中|入参无效|没有【生效中】|找不到|重复|JwtToken|已过期|catalina|token 为空|被踢出|Broken pipe|ErrorPage|Servlet\.service\(\) for servlet \[dispatcherServlet\]|无*数据)' | grep -iE -C 30 '(timeout|PSQLException: ERROR|ERROR|失败|EOFException|SocketException|IOException|sql执行出现异常|监测点|不判定为缺失)' || true && \
echo "查找完成"

完整版:

clear && \
log_dir="/home/logs/java-gz-log-dir" && \
log_file="java-gz-log-dir-error.log.*.gz" && \
latest_log=$(ls -t $log_dir/$log_file | head -1) && \
if [ -z "$latest_log" ]; then
    echo "未找到需要复制的日志文件"
    exit 0
fi && \
cd "$log_dir" && \
[ -d "$log_dir/lastDayErrorLog" ] || mkdir "$log_dir/lastDayErrorLog" && \
rm -f "$log_dir"/lastDayErrorLog/* && \
echo "开始复制昨天的错误日志文件: $latest_log" && \
echo "开始复制昨天的错误日志文件: $latest_log" >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
cp "$latest_log" "$log_dir/lastDayErrorLog" && \
cd "$log_dir/lastDayErrorLog" && \
echo "开始解压错误日志文件"  && \
echo "开始解压错误日志文件" >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
gunzip -c *.gz > unzip_file.log || { echo "解压失败"; exit 1; } && \
echo "确认当前文件夹下文件:" && \
echo "确认当前文件夹下文件:" >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
ls -lsh >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
echo "开始查找错误日志文件内容;$(ls -t ./*)"  && \
echo "开始查找错误日志文件内容;$(ls -t ./*)" >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
total_lines=$(cat * | wc -l) && \
# 控制打印10次进度日志
print_interval=$((total_lines / 10)) && \
output_file="$log_dir/lastDayErrorLog/error_analysis_result.log" && \
>> "$output_file" && \ # 清空或创建输出文件
awk -v total_lines="$total_lines" -v print_interval="$print_interval" '
    BEGIN {
        context = 50; # 设置上下文为50行
        line_count = 0; # 记录当前处理的行数
        RED = "\033[31m"; # 红色
        BLUE = "\033[34m"; # 蓝色
        RESET = "\033[0m"; # 重置颜色
    }
    {
        # 跳过空白行
        if (NF == 0) {
            next;
        }

        # 打印提示信息
        if (line_count % print_interval == 0) {
            print "继续查找中... 当前行号:", NR, "/ 总行数:", total_lines;
        }
        line_count++;

        # 忽略不相关的行
        if ($0 ~ /登录失败|不包含|不合法|不匹配|存在|未在系统中|入参无效|没有【生效中】|找不到|重复|JwtToken|已过期|catalina|token 为空|被踢出|Broken pipe|ErrorPage|Servlet\.service$$ for servlet $dispatcherServlet$|无*数据/) {
            next;
        }

        # 缓存所有行,不删除任何内容
        lines[NR] = $0;

        # 匹配目标关键字并记录命中行号
        if ($0 ~ /timeout|PSQLException: ERROR|ERROR|失败|EOFException|SocketException|IOException|sql执行出现异常|不判定为缺失/) {
            hit_lines[NR] = 1; # 记录命中行号
        }
    }
    END {
        # 将命中行号存储到数组中以便排序
        n = 0;
        for (hit_nr in hit_lines) {
            sorted_hits[++n] = hit_nr+0; # 强制转为数值
        }

        # 手动实现冒泡排序(适用于所有 awk 实现)
        for (i = 1; i <= n; i++) {
            for (j = i + 1; j <= n; j++) {
                if (sorted_hits[i] > sorted_hits[j]) {
                    temp = sorted_hits[i];
                    sorted_hits[i] = sorted_hits[j];
                    sorted_hits[j] = temp;
                }
            }
        }

        # 遍历排序后的命中行号,打印上下文
        for (i = 1; i <= n; i++) {
            hit_nr = sorted_hits[i];

            printf("\n\n-----------------------错误序号: %d------------------------------\n", i);
			printf("\n\n-----------------------错误序号: %d------------------------------\n", i) >> "'"$output_file"'";


            # 打印命中行(红色高亮)
            printf("%s命中关键字: 命中行号 %d%s\n", RED, hit_nr, RESET);
            printf("%s%s%s\n", RED, lines[hit_nr], RESET); # 打印命中行,使用红色高亮

            # 写入文件:命中行
            printf("命中关键字: 命中行号 %d\n", hit_nr) >> "'"$output_file"'";
            printf("%s\n", lines[hit_nr]) >> "'"$output_file"'";

            # 打印上下文范围提示
            print (hit_nr > context ? "..." : ""), (hit_nr-context > 0 ? hit_nr-context : 1), "<--命中前后上下文-->", hit_nr+context, "...";

            # 写入文件:上下文范围提示
            printf((hit_nr > context ? "...\n" : ""), (hit_nr-context > 0 ? hit_nr-context : 1), "<--命中前后上下文-->", hit_nr+context, "...") >> "'"$output_file"'";

            # 打印上下文行
            for (j = hit_nr-context; j <= hit_nr+context; j++) {
                if (j in lines && length(lines[j]) > 0 && j >= 1) { # 确保 j 在有效范围内
                    if (j == hit_nr) {
                        # 当前行是命中行,打印红色
                        printf("%s[命中行号:%d] %s%s\n", RED, j, lines[j], RESET);
                        # 写入文件:命中行上下文
                        printf("[命中行号:%d] %s\n", j, lines[j]) >> "'"$output_file"'";
                    } else if (lines[j] ~ /cn.jiangjiesheng|otherkeyword/) {
                        # 当前行包含指定关键词,打印蓝色
                        printf("%s[行号:%d] %s%s\n", BLUE, j, lines[j], RESET);
                        # 写入文件:关键词上下文
                        printf("[行号:%d] %s\n", j, lines[j]) >> "'"$output_file"'";
                    } else {
                        # 其他行是上下文行,打印默认颜色
                        printf("[行号:%d] %s\n", j, lines[j]);
                        # 写入文件:其他上下文
                        printf("[行号:%d] %s\n", j, lines[j]) >> "'"$output_file"'";
                    }
                }
            }
        }
    }
' unzip_file.log || true && \
echo " " && \
echo " " >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
echo "查找完成,准备删除解压文件" && \
echo "查找完成,准备删除解压文件" >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
find "$log_dir/lastDayErrorLog" -maxdepth 1 -type f ! -name '*result*' -exec rm -f {} \; && \
echo "删除解压文件完成,执行ls -lsh结果" && \
echo "删除解压文件完成,执行ls -lsh结果" >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
ls -lsh && \
ls -lsh >> "$log_dir/lastDayErrorLog/error_analysis_result.log" && \
echo "是否下载分析结果文件 error_analysis_result.log? 输入 y 确认,其他键跳过【适用XShell,后期可以改成小文件不压缩】: " && \
read user_input && \
if [ "$user_input" = "y" ]; then
	tar -zcvf error_analysis_result.log.tar.gz error_analysis_result.log
    sz error_analysis_result.log.tar.gz || echo "文件下载失败,请检查环境是否支持 sz 命令。"
else
    echo "跳过文件下载。"
fi

效果如图:
效果展示

最新版本更新
https://code.jiangjiesheng.cn/article/364?from=csdn

推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ETF 场内基金是什么?佣金最低又是多少呢?

嘿&#xff0c;朋友们&#xff0c;大家好啊&#xff0c;我是StockMasterX&#xff0c;今天咱们就坐下来慢慢聊聊这个话题&#xff0c;ETF 场内基金到底是个啥东西&#xff0c;它的佣金最低能到多少&#xff0c;真的是个值得深挖的问题。 说起ETF&#xff0c;我还记得刚入行那会…

[论文阅读]PMC-LLaMA: Towards Building Open-source Language Models for Medicine

PMC-LLaMA&#xff1a;构建医学开源语言模型 摘要 最近&#xff0c;大语言模型在自然语言理解方面展现了非凡的能力。尽管在日常交流和问答场景下表现很好&#xff0c;但是由于缺乏特定领域的知识&#xff0c;这些模型在需要精确度的领域经常表现不佳&#xff0c;例如医学应用…

26考研——线性表(2)

408答疑 文章目录 一、线性表的定义和基本操作二、线性表的顺序表示三、 线性表的链式表示四、 顺序表和链表的比较五、参考资料鲍鱼科技课件26王道考研书 六、总结顺序表总结顺序表特点深入掌握顺序表的管理方式 单链表总结双循环链表总结 一、线性表的定义和基本操作 文章链…

低代码开发平台:飞帆画 echarts 柱状图

https://fvi.cn/711 柱状图这个控件是由折线图的控件改过来的&#xff0c;在配置中&#xff0c;单选框选择柱状图就行了。

PowerPhotos:拯救你的Mac照片库,告别苹果原生应用的局限

如果你用Mac管理照片&#xff0c;大概率被苹果原生「照片」应用折磨过——无法真正并行操作多个图库。每次切换图库都要关闭重启&#xff0c;想合并照片得手动导出导入&#xff0c;重复文件更是无处可逃…… 直到我发现了 PowerPhotos&#xff0c;这款专为Mac设计的照片库管理…

Linux 下 日志系统搭建全攻略

目录 一、引言 二、日志系统基础 日志级别 日志输出格式 三、创建日志所需函数 认识可变参数 ​编辑 获取时间的函数 小结 四、创建日志 一、引言 在 Linux 环境中开发 C/C 程序时&#xff0c;日志系统是不可或缺的一部分。它不仅有助于调试程序、排查问题&#xff…

Linux系统安装Postgre和Postgis教程

卸载 如果之前没装过可以忽略这一步 卸载前记得备份数据库数据(如果还需要的话)&#xff01;&#xff01;&#xff01; 一、删除 Docker 安装的 PostgreSQL/PostGIS 1. 停止并删除容器 # 查看所有容器 docker ps -a | grep postgres# 停止并删除容器&#xff08;替换为实际…

LXC 导入多Linux系统

前提要求 ubuntu下安装lxd 参考Rockylinux下安装lxd 参考LXC 源替换参考LXC 容器端口发布参考LXC webui 管理<

6547网:蓝桥STEMA考试 Scratch 试卷(2025年3月)

『STEMA考试是蓝桥青少教育理念的一部分&#xff0c;旨在培养学生的知识广度和独立思考能力。考试内容主要考察学生的未来STEM素养、计算思维能力和创意编程实践能力。』 一、选择题 第一题 运行下列哪个程序后&#xff0c;飞机会向左移动&#xff1f; ( ) A. …

使用Webpack搭建React项目:从零开始

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

STM32提高篇: CAN通讯

STM32提高篇: CAN通讯 一.CAN通讯介绍1.物理层2.协议层二.STM32CAN外设1.CAN控制器的3种工作模式2.CAN控制器的3种测试模式3.功能框图三.CAN的寄存器介绍1.环回静默模式测试2.双击互发测试四.CAN的HAL代码解读一.CAN通讯介绍 CAN(Controller Area Network 控制器局域网,简称…

25.Reactor

预备知识 std::bind template <class Fn, class... Args>/* unspecified */ bind (Fn&& fn, Args&&... args);解释&#xff1a; std::bind(&TcpServer::Accepter, this, std::placeholders::_1) 这段代码使用了 C11 中的 std::bind 函数&#xff0…

Linux进程间通信——有名管道

一.概念 函数形式&#xff1a;int mkfifo(const char \*filename,mode_t mode); 功能&#xff1a;创建管道文件 参数&#xff1a;管道文件文件名\路径&#xff0c;权限&#xff0c;创建的文件权限仍然和umask有关系。 返回值&#xff1a;创建成功返回0&#xff0c;创建失败返回…

Axure RP9.0教程: 查询条件隐藏与显示(综合了动态面板状态切换及展开收缩效果实现)

文章目录 引言I 原型显示/隐藏搜索框思路步骤详细操作II 若依 ruoyi 显示/隐藏搜索框 & 显示隐藏列自定义设置显示隐藏列显示/隐藏搜索框引言 数据筛选有大量的查询条件时,可以选择查询隐藏效果。 I 原型显示/隐藏搜索框 综合了动态面板状态切换及展开收缩效果实现 思…

【漫话机器学习系列】183.非参数方法(Non-parametric Methods)

非参数方法&#xff08;Non-parametric Methods&#xff09;详解 概述 非参数方法是一类在统计学和机器学习中广泛应用的技术&#xff0c;它的特点是不对特征值和目标值之间的关系做具体的假设。与传统的参数方法&#xff08;如线性回归、逻辑回归等&#xff09;不同&#xf…

智能驾驶中预测模块简介

1.轨迹预测的定义 轨迹预测是自动驾驶系统“感知-预测-规控”流程中的核心环节&#xff0c;位于感知与规划模块之间&#xff0c;起到承上启下的作用。感知系统负责检测道路环境中的动态和静态元素&#xff0c;包括车辆、行人、自行车、交通标志、车道线等&#xff0c;而预测模…

剑指offer经典题型(一)

本期我们将开始进行剑指offer中经典题型的学习。 数组相关 题目1&#xff1a;在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输…

ctfshow VIP题目限免 版本控制泄露源码2

根据题目提示是版本控制泄露源码 版本控制&#xff08;Version Control&#xff09;是一种在软件开发和其他领域中广泛使用的技术&#xff0c;用于管理文件或项目的变更历史。 主流的版本控制工具&#xff1a; ‌Git‌&#xff1a;目前最流行的分布式版本控制系统。‌SVN‌&am…

蓝牙跳频扩频技术的作用:提升抗干扰能力与通信可靠性的核心机制

在无线通信技术领域&#xff0c;蓝牙&#xff08;Bluetooth&#xff09;以其短距离、低功耗和高兼容性成为连接电子设备的首选方案。其核心技术之一 ——跳频扩频&#xff08;Frequency Hopping Spread Spectrum, FHSS&#xff09;&#xff0c;是蓝牙在2.4 GHz ISM频段复杂电磁…

推荐系统(二十二):基于MaskNet和WideDeep的商品推荐CTR模型实现

在上一篇文章《推荐系统&#xff08;二十一&#xff09;&#xff1a;基于MaskNet的商品推荐CTR模型实现》中&#xff0c;笔者基于 MaskNet 构建了一个简单的模型。笔者所经历的工业级实践证明&#xff0c;将 MaskNet 和 Wide&Deep 结合应用&#xff0c;可以取得不错的效果&…