【Linux】编写shell脚本将项目前一天打印的日志进行提取,并且单独保存

业务场景:又到了熟悉的业务场景环节,其实应用上有很多,我们为了方便提取日志中部分关键的内容,对接给其他人也好,方便自己统计也罢,都会比每次我们都去服务器上及时查看,或者下载全部日志再筛选要方便的,下面是通过写一个shell脚本来实现该功能~

一、开始编写

1.1 先本地新建一个text进行编写

假设:
提取的日志位置: /****/****/node.log
输出的日志文件夹(或者文件都是可以的):/****/out/

#!/bin/bash
# 获取前一天的日期
yesterday=$(date -d "yesterday" +"%Y-%m-%d")
# 设置将要提取的日志文件路径
log_file="/****/****/node.log"
output_file="/****/out/${yesterday}.log"
# 提取包含 "test" 的整条日志到新文件中
grep '"test"' $log_file | grep "$yesterday" > $output_file

1.2 修改上面text文件的后缀为.sh ,例如 text.sh

二、运行

将.sh文件上传到服务器上,打开Xshell等工具输入命令

2.1 添加权限
chmod +x text.sh
2.2 我们使用记事本编辑换行等格式会出现问题,执行格式转换命令
sed -i 's/\r$//' text.sh
2.3 运行脚本
./text.sh

三、查看

运行完毕,没有报错的情况下,就可以到我们的输出路径下,去查看输出结果了。(提取的目标log设置尽量不要和输出log是一样的,避免出现覆盖的情况)

四、引申

到这里,shell脚本已经可以正常运行了,实际上根据具体情况,我们的筛选条件各不相同:
脚本中的这个搜索语法也可以有更多的定制化

grep '"test"' $log_file | grep "$yesterday" > $output_file

比如下面这个语法,就是以一个空格为间隔,将从该日志行的第一部分 开始到从左数第二个部分开始截取,不会截取第二个部分,会将之前的部分截掉.

awk '{print substr($0,index($0,$2))}'

例如:

2023-07-26 14:00:36.459  INFO 25513 --- [           main] ConfigServletWebServerApplicationContext : Refreshing

截取后会变成:

14:00:36.459  INFO 25513 --- [           main] ConfigServletWebServerApplicationContext : Refreshing

等等,不过多举例,根据具体情况,做具体分析和处理.

[后面,会再更新一个姊妹篇,即在linux使用定时任务,来自动执行该脚本]

猜你喜欢

转载自blog.csdn.net/qq_48424581/article/details/132088102