当前位置: 首页 > news >正文

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

最新版本更新
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讲 源码下载》

相关文章:

  • 当AI开始“思考“:揭秘大语言模型的文字认知三部曲题
  • 使用RKNN进行yolo11-cls部署
  • Java的Stream流
  • 大量意图识别方案
  • 目标跟踪综合知识
  • 前端抽象化,打破框架枷锁:Http请求也许该一样
  • 数字化转型国家标准- GB/T 45341-2025《数字化转型管理 参考架构》
  • ThreadLocal 深度解析
  • 解决Certificate verification failed错误
  • linux--0.Linux的特点
  • 群体智能优化算法-变色龙优化算法(Chameleon Swarm Algorithm, CSA,含Matlab源代码)
  • cJSON 处理 JSON(轻量级 C 语言库)(二)
  • 蓝桥杯备赛:动态规划入门
  • 架构设计基础系列:面向对象设计的原则
  • 【Spring Boot 与 Spring Cloud 深度 Mape 之三】服务注册与发现:Nacos 核心实战与原理浅析
  • 【Easylive】服务端操作 Cookie 的完整流程(结合案例解析)
  • APIPost接口测试完整流程指南
  • java学习笔记11——泛型
  • 【Unity】 HTFramework框架(六十四)SaveDataRuntime运行时保存组件参数、预制体
  • Python WebSockets 库详解:从基础到实战
  • 综艺还有怎样的新可能?挖掘小众文化领域
  • 国际足联女子世界杯再次扩军,2031年起增至48支球队
  • 韩国前国务总理韩德洙加入国民力量党
  • 上海第四批土拍成交额97亿元:杨浦宅地成交楼板单价半年涨近7000元
  • 上海“电子支付费率成本为0”背后:金融服务不仅“快”和“省”,更有“稳”和“准”
  • 云南一餐馆收购长江野生鱼加工为菜品,被查处罚款