如何优雅地记录Shell脚本的执行日志
创作时间:
作者:
@小白创作中心
如何优雅地记录Shell脚本的执行日志
引用
CSDN
1.
https://blog.csdn.net/zhangkunls/article/details/141730779
在Shell脚本开发中,如何优雅地记录执行日志是一个常见需求。本文将介绍一个简单实用的日志记录函数,帮助你轻松实现脚本运行情况的记录,包括时间戳和日志文件大小控制等功能。
需求分析:把日志搞得明明白白
我们需要一个功能强大的日志函数,能够实现以下几个目标:
- 记录脚本的运行情况:这包括脚本输出的各种信息,无论是字符串、变量值,还是命令的执行结果。
- 记录时间戳:每条日志信息都应该带有精确的时间戳,方便我们追溯脚本的执行过程。
- 控制日志文件的大小:日志文件随着时间的推移会不断增大,所以需要在日志达到一定行数时,删除最早的日志记录,以避免日志文件无限制地增长。
实现思路:三天三夜后的优雅代码
经过不懈的努力,我们写出了一个简单而实用的日志记录函数 log(),它可以轻松地集成到任何Shell脚本中。下面是代码的核心部分:
#!/bin/bash
log(){
local fileName="./$(basename $0 .sh).log" # log文件名
local fileMaxLen=100 # log文件最大行数
local fileDeleteLen=10 # 达到最大行数后删除的行数
if test $fileName; then
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName
loglen=`grep -c "" $fileName`
if [ $loglen -gt $fileMaxLen ]; then
sed -i '1,'$fileDeleteLen'd' $fileName
fi
else
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileName
fi
}
这个函数非常简洁,但功能却很强大。它自动生成一个与脚本同名的日志文件,并且会在日志行数超过设定的最大值时,从文件顶部开始删除旧的日志记录。
实战演练:给脚本加点“料”
假设我们需要实时监控CPU温度,并记录每次监控的结果。通常我们会使用如下脚本:
echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]
通过watch命令可以每秒自动运行这个脚本,并实时查看温度变化:
watch -n 1 ./cputemp.sh
但是,这种方式虽然可以实时监控,却无法保存历史数据,稍不留神就错过了关键的温度变化。于是我们把之前写的 log() 函数加到脚本中,修改后的脚本如下:
#!/bin/bash
log(){
local fileName="./$(basename $0 .sh).log"
local fileMaxLen=100
local fileDeleteLen=10
if test $fileName; then
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName
loglen=`grep -c "" $fileName`
if [ $loglen -gt $fileMaxLen ]; then
sed -i '1,'$fileDeleteLen'd' $fileName
fi
else
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileName
fi
}
echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]
log "CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]"
现在,你只需要运行脚本,日志文件就会自动生成并记录每次的温度信息。通过cat ./cputemp.log可以查看日志,发现温度变化一目了然。
遇到的“坑”:挖坑容易填坑难
当然,开发过程中也遇到了一些“坑”,例如:
watch命令的限制:你可能会想到直接在脚本里使用watch命令来实现监控,但这会导致监控数据固定化,无法实时更新。最好的办法还是让watch命令单独运行,而脚本负责记录日志。- 单引号里的变量引用问题:在使用
sed命令时,如果需要在单引号内引用变量,需要对变量进行单引号嵌套处理,不然会报错。比如:
sed -i '1,'$fileDeleteLen'd' $fileName
总结:日志记录,其实可以很简单
通过简单的Shell函数,我们可以轻松实现日志记录功能,不仅解放了双眼,也让脚本的运行情况尽在掌握。虽然代码并不复杂,但却解决了一个实际的问题。如果你也有类似的需求,不妨试试这种方法,相信会给你的开发工作带来不少便利。
热门推荐
苹果手机密码安全全攻略:从设置到管理的最佳实践
80度水温最佳,山楂干泡水的科学饮用指南
白芷、小茴香、白胡椒:炖羊肉汤的黄金组合
深圳地铁19号线一期工程获批,皇岗口岸等站换乘调整
深圳地铁12号线开通:BIM技术+无人驾驶打造智慧地铁新标杆
阿坝三日游:黄龙九寨沟花湖,三大景区精华全攻略
从酥油茶到牦牛
肉:阿坝州美食里的藏羌文化
九寨沟、黄龙、四姑娘山:从水景到雪山的自然奇观
避开人流赏冬景:阿坝州黄龙九寨沟三日游
西安世博园必打卡:长安塔观景攻略
西安世博会背后的环保奇迹:从污染重灾区到生态补偿区
电动汽车供电设备安全要求标准
冬季羊汤养生攻略:从食材到禁忌,这些要点需谨记
瑜伽减压新姿势,告别焦虑每一天
孕期吃鸽子蛋:六大营养助力发育,这些事项要注意
鸽子蛋营养价值高,但增强免疫力需均衡饮食
琅琊区科协开展“食品安全科普进社区”活动
中国古代女官:介于嫔妃与宫女间的宫廷管理者
“女中尧舜”王喜姐:明朝在位最长的皇后
费曼质疑选择公理:数学无限性与物理离散性的矛盾
存款利率再降,储户的钱去哪儿了?
黄山必吃六大美食:每一道都凝聚着徽州的历史味道
南极海冰面积连续三年跌破关键水平!
从中医角度看:肝主情志,5个实用方法助你养肝护肝
百香果种植:百香果及其高产栽培技术,以下几点最主要
2024年灵活就业人员,退休年龄有变吗?有些特殊情况要分开看待
狗狗神经损伤的家庭护理秘籍
新装修房除醛指南:从源头控制到专业治理全攻略
环保耐用纹理美,实木板成健康家居首选
Wi-Fi频宽怎么选?一文读懂20MHz、40MHz、80MHz的区别与选择