Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能

Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能

本文链接:http://codingstandards.iteye.com/blog/803686   (转载请注明出处)

问题描述

  在开发Java应用程序时,我们经常使用log4j作为日志输出工具,它可以根据配置文件来决定生成日志文件的策略,比如可以配置成每小时生成一个日志文件(附件压缩包里有log4j.properties的样本)。我们可以用tail -f logfile的形式去实时跟踪日志,以方便观察程序运行的信息。但是在log4j配置成每隔一定时间生成文件时,当时间间隔到达时,原来的日志文件会根据一定规则进行改名,比如ADMIN.LOG改成ADMIN.2010-11-05-10的格式,然后log4j会重新创建一个新的日志文件。这个时候,就会发现正在运行的tail -f命令不会继续输出新的日志文件内容,而是停在那里不动了,需要Ctrl+C杀掉原来的,再重新运行。能不能通过某种方式来避免这种情况发生呢?

 

解决思路

  Linux系统下每个文件都有一个称为inode的数值,相当于文件的ID,在重新创建文件时,系统会新分配一个inode给这个文件,因此我们可以根据文件的inode是否改变来判断是否有新的日志文件生成。我根据这一点编写了一个bash脚本ftail.sh来做到了原来tail -f无法做到的事情,见后面的脚本内容部分,里面有注释。

使用方式

  下 载附件ftail.tar.gz,上传到Linux系统,然后执行tar zxf ftail.tar.gz,就可以看到ftail.sh了。

 

  格式:ftail.sh <file>

 

[root@web web_server]# ./ftail.sh
+-------------------------------------------------------------------------------------------------------+
| ftail.sh v0.1 - a bash script that enhanced 'tail -f', written by codingstandards@gmail.com |
+-------------------------------------------------------------------------------------------------------+


usage: ./ftail.sh <file>

[root@web web_server]# ./ftail.sh log/ADMIN.LOG
+-------------------------------------------------------------------------------------------------------+
| ftail.sh v0.1 - a bash script that enhanced 'tail -f', written by codingstandards@gmail.com |
+-------------------------------------------------------------------------------------------------------+

##### ./ftail.sh: FILE log/ADMIN.LOG INODE=118259971 PID 11495 #####

此处省略了日志输出的具体内容。

提示:可以把ftail.sh复制到/usr/bin下,然后就可以在任何有日志的目录进行使用了。

[root@web web_server]# cp ftail.sh /usr/bin -af
cp:是否覆盖“/usr/bin/ftail.sh”? y
[root@web web_server]# ftail.sh log/ADMIN.LOG
+---------------------------------------------------------------------------------------------+
| ftail.sh v0.1 - a bash script that enhanced 'tail -f', written by codingstandards@gmail.com |
+---------------------------------------------------------------------------------------------+

##### /usr/bin/ftail.sh: FILE log/ADMIN.LOG INODE=118259971 PID 11973 #####

此处省略了日志输出的具体内容。

脚本内容

附件压缩包中的ftail.sh文件

#!/bin/sh

# ftail.sh = tail -f 的增强版本,可检查文件是否重建过或删除过
# usage: ftail.sh <file>
# author: codingstandards@gmail.com
# release time: v0.1 2010.11.04/05

# 显示title
echo "+---------------------------------------------------------------------------------------------+"
echo "| ftail.sh v0.1 - a bash script that enhanced 'tail -f', written by codingstandards@gmail.com |" >&2
echo "+---------------------------------------------------------------------------------------------+"
echo

# 判断参数个数
if [ "$#" != "1" ]; then
	echo "usage: $0 <file>" >&2
	exit 1
fi

# 取文件参数
FILE="$1"

# 取文件的inode
INODE=$(stat -c "%i" "$FILE")

# 启动tail -f进程,并打印信息
# usage: fork_tail
fork_tail()
{
	if [ -r "$FILE" ]; then
		tail -f "$FILE" &
		PID=$!
		echo "##### $0: FILE $FILE INODE=$INODE PID $PID #####" >&2
	else
		PID=
		INODE=
		echo "##### $0: FILE $FILE NOT FOUND #####" >&2
	fi
}

# 杀掉tail进程
# usage: kill_tail
kill_tail()
{
	if [ "$PID" ]; then
		kill $PID
	fi
}

# 检查inode是否变化了
# usage: inode_changed
inode_changed()
{
	NEW_INODE=$(stat -c "%i" "$FILE" 2>/dev/null)
	if [ "$INODE" == "$NEW_INODE" ]; then
		return 1
	else
		INODE=$NEW_INODE
	fi
}

# 设置陷阱,按Ctrl+C终止或者退出时杀掉tail进程
trap "kill_tail; exit" SIGINT SIGTERM SIGQUIT EXIT

# 首次启动tail -f进程
fork_tail

# 每隔一定时间检查文件的inode是否变化,如果变化就先杀掉原来的tail进程,重新启动tail进程
while :
do
	sleep 5
	if inode_changed; then
		kill_tail
		fork_tail
	fi
done

# END.

 

BLE透传速率调优(二) 摘要:本文分析了蓝牙协议中MDbit=1时应连续发送多包但实际只发一包的问题。通过波形分析和代码调试,发现问题的根源在于接收端出现sync error导致提前关闭接收窗口,而非发送端问题。最终通过调整RF时序参数(将rxpathdly改为13us)解决了TX到RX转换的同步问题,使连接事件能正常发送多个数据包,传输速率提升至70kb/s。文中详细记录了使用逻辑分析仪和trace宏调试的过程,揭示了CEVA芯片设计中TX中断与ACK接收的关联特性。 阅读详情

相关推荐

数字图像处理第九章笔记

目录一、腐蚀与膨胀1、腐蚀2、膨胀3、对偶性4、开操作与闭操作二、一些基本的形态学算法1、边界提取2、孔洞填充3、连通分量提取4、凸壳5、细化6、粗化7、骨架8、形态学重建三、灰度级形态学1、腐蚀和膨胀2、开运算和闭运算3、灰度级形态学算法 一、腐蚀与膨胀 1、腐蚀 腐蚀可以去除图像的某些部分。 2、膨胀 膨胀可以连接裂缝。 3、对偶性 膨胀和腐蚀彼此关于集合求补运算和反射运算是对偶的 4、开操作与闭操作 开操作:B对A先腐蚀,再进行膨胀 可以平滑物体轮廓,断开较窄的狭颈并消除较细的突出物。 闭操作

方悔读书迟 1375

Linux环境查看日志的常用操作

工作中经常用到的linux命令

lyk1184919379的博客 2452

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3530

log4j漏洞原理分析&复现&检测&复盘

log4j漏洞原理分析&复现&检测&复盘

qq_43665434的博客 3410

Python实战:3步搞定DICOM转JPG/PNG(附批量处理脚本)

本文详细介绍了如何使用Python在3步内将DICOM医学影像转换为JPG/PNG格式,并提供了批量处理脚本。通过Pydicom、Pillow和NumPy库的组合,解决了像素值处理、批量转换效率和医学图像特性保留等关键问题,适合医疗AI开发者和放射科医生快速集成到工作流中。

numpy6sculptor的博客 589

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】

Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。 注意: ​​​​​​​跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。

qq_3517289697的博客 3913

linux 查看系统版本脚本

linux 查看系统版本脚本

jxthxy19901204的博客 864

ArcMap投影变换避坑指南:为什么你的坐标转换总出错?常见问题解析与解决方案

本文深入解析ArcMap中坐标转换与投影变换的核心区别与常见陷阱。针对坐标转换总出错的问题,从混淆“定义投影”与“投影变换”、栅格数据重采样选择、矢量数据地理变换参数设置等关键环节,提供清晰的避坑指南与实战解决方案,帮助用户确保空间数据的精确匹配。

weixin_29210727的博客 356

一键检查Log4J2漏洞脚本

#!/bin/sh for file in */lib/*.jar do echo $file jar -tvf $file | grep log done

liming495的专栏 1005

OsgEarth —— 笔记1 - 创建地球的earth文件

效果         正文      1、准备一张全球的渲染图(tif格式)、一张全球的高程图(tif格式)        2、创建并编写.earth文件           在步骤1目录下创建china-simple.earth,并将如下内容写入。 <map name="Globe" type="geocentric" version="2"> <!-- 全球影像图 --> <image name="GlobeImage" driver="gdal"> &l

7681

【突变检验合集】含Pettitt突变检验等

突变检验方法合集

WW、forever的博客 3533

编写tail程序linux使用,Linux命令:tail

less命令简介:此命令从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,且不停刷新,使你一直看到最新的内容。1.命令格式;tail[OPTION]... [FILE]...2.命令功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。3.命令参数:-f循环读取-q不显示处理信息-v显示详细的处理信息-c显示的字节数...

weixin_29677553的博客 333

汽车电子RTOS--AUTOSAR OS

AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR(汽车开放系统架构)标准中的一个重要组件,它是一个专门为汽车电子控制单元(ECU)设计的实时操作系统(RTOS)。AUTOSAR OS旨在提供一个标准化的软件平台,以促进不同供应商和汽车制造商之间的组件复用和协同开发,提高软件质量和降低成本。

MHD0815的博客 1796

Linux命令之tail - 输出文件尾部/动态监视文件尾部

本文链接:http://codingstandards.iteye.com/blog/832575   (转载请注明链接) 用途说明 tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。   常用参数 格式:tail file 输出指定文件fi

www.hohode.com 6488

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

tail--动态监视文件尾部

tail - 输出文件尾部/动态监视文件尾部 用途说明 tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。   常用参数 格式:tail file 输出指定文件file的尾部内容,默认输出最后十行内容(output

4484

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

一天一条Linux指令-tail

用途说明 tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。   常用参数 格式:tail file 输出指定文件file的尾部内容,默认输出最后十行内容(output the last part of files。Prin

u012313689的博客 346

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux tail --输出文件尾部/动态监控文件尾部

用途说明 tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。   常用参数 格式:tail file 输出指定文件file的尾部内容,默认输出最后十行内容(outputthe last part of files。Print  the  las

老莫小小朋友 4873

tail 监控日志文件

ail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。 常用参数 格式:tail file 输出指定文件file的尾部内容,默认输出最后十行内容(output the last part of files。Print the last 10 l...

weixin_33885676的博客 179

我使用过的Linux命令之tail - 输出文件尾部/动态监视文件尾部

我使用过的Linux命令之tail - 输出文件尾部/动态监视文件尾部 本文链接:http://codingstandards.iteye.com/blog/832575   (转载请注明链接) 用途说明 tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用

大脸猫脸大 2256

Linux命令:tail

less命令简介:此命令从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,且不停刷新,使你一直看到最新的内容。1.命令格式;tail[OPTION]... [FILE]...2.命令功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。3.命令参数:-f循环读取-q不显示处理信息-v显示详细...

weixin_34301132的博客 135
上一篇: 我使用过的Linux命令之nano - 比vi简单易用的文本编辑器
下一篇: 我使用过的Linux命令之clear - 清除终端屏幕,不是cls
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值