Apache Camel技巧之快速定位Exchange执行上下文日志

Camel应用在生产环境下运行时候,必然会记录其执行上下文信息,以便于问题的追踪和回溯。但从浩如烟海的日志中找出感兴趣的内容势必是一个非常枯燥耗时的操作,本文意图缓解这一现象。

1. 概述

本次我们将借助Linux提供的一系列命令工具来快速检索出所感兴趣的Exchange执行上下文日志。

2. 解决方案

经过一番折腾,最终还是做到了一条命令完成需求的目的。以下就是最终的成果:

# 涉及到的linux命令工具: awk, xargs, sed
grep -nR 'ID-fulizhe-1556011014491-0-1' ./camel.log | awk -F '[ :]+' '{{print $1}}' | awk '{if(NR == 1){print $1-1}} ; END {print $1+200}' | xargs | sed 's/ /,/g' | xargs -I {} sed -n {}p camel.log > /d/result.log

通过以上命令,可以一次性地获得所关注的Exchange执行时候的上下文日志信息。接下来就让我们解释下这条命令中的细节,便于有兴趣的读者定制。

解释:

grep -nR 'ID-fulizhe-1556011014491-0-1' ./camel.log |                       # 从指定文件中抓取指定字符串所在行, 显示其所在行数及该行内容, 
    awk -F '[ :]+' '{{print $1}}' |                                         # 前面所获取字符串按空格或 : 进行分割之后, 截取其第一列, 即行数; 
        awk '{if(NR == 1){print $1-1}} ; END {print $1+200}' |              # 截取出上一步所获得的行数字符列表的第一列和最后一列, 即拥有所寻找字符串的所在范围, 注意我们这里进行了适量的上下范围的扩张(向上减1, 向下加200)
            xargs |                                                         # 将上一步获取到的两个首尾数字拼接成一行, 空格分开
                sed 's/ /,/g' |                                             # 将上一部已经变成一行的字符串中的空格替换为,
                     xargs -I {} sed -n {}p camel.log > /d/result.log       # 以上一步获取到的字符串作为范围参数, 传递进来截取出该Camel Exchange执行时候的上下文信息

3. 最后

本条命令适用于任何以关键字段检索相关上下文信息的日志查找的需求。后期可以做成相应的SHELL脚本,进一步简化操作,提高效率。

你可能感兴趣的:(Apache,Camel)