【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使用定时任务,来自动执行该脚本]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值