Linux 如何使用给定的模式跟踪-f最新的日志文件
我使用的一些日志系统每小时创建一个日志文件,如下所示:Linux 如何使用给定的模式跟踪-f最新的日志文件,linux,logging,zsh,tail,Linux,Logging,Zsh,Tail,我使用的一些日志系统每小时创建一个日志文件,如下所示: SoftwareLog.2010-08-01-08 SoftwareLog.2010-08-01-09 SoftwareLog.2010-08-01-10 我试图跟踪给出模式的最新日志文件(如SoftwareLog*),我意识到: tail -F (tail --follow=name --retry) 但这只跟在一个特定的名字后面,而且这些名字在日期和时间上是不同的。我试过这样的方法: tail --follow=name --ret
SoftwareLog.2010-08-01-08
SoftwareLog.2010-08-01-09
SoftwareLog.2010-08-01-10
我试图跟踪给出模式的最新日志文件(如SoftwareLog*),我意识到:
tail -F (tail --follow=name --retry)
但这只跟在一个特定的名字后面,而且这些名字在日期和时间上是不同的。我试过这样的方法:
tail --follow=name --retry SoftwareLog*(.om[1])
但是通配符语句在传递给tail之前被解析,并且不会在每次tail重试时重新执行
有什么建议吗?我还没有测试过这个,但是一种可能有效的方法是运行后台进程,创建并更新一个符号链接到最新的日志文件,然后你将
tail-f
(或tail-f
)这个符号链接。[编辑:在快速搜索工具后]
你可能想试试multitail-
如果你想坚持丹尼斯·威廉姆森的答案(我也相应地给了他+1分),这里是为你填空的地方
在shell中,运行以下脚本(或者它是zsh等效脚本,在看到zsh标记之前,我在bash中快速编写了此脚本):
背景:使用普通方法的过程(同样,我不知道zsh,所以可能会有所不同)
/updateSymlink.sh 2>&1>/dev/null
然后tail-F$SYMLINK\u路径
,这样tail就可以更改符号链接或旋转文件
这有点复杂,但我不知道用尾巴做这件事的其他方法。如果其他任何人知道有一个实用程序可以处理这个问题,那么让他们向前看,因为我也希望自己能看到它——像Jetty这样的应用程序默认情况下是这样记录日志的,我总是编写一个在cron上运行的符号链接脚本来补偿它
[编辑:从一行末尾删除了一个错误的“j”。您还有一个错误的变量名“lastModifiedFile”不存在,您设置的正确名称是“lastModified”]我认为最简单的解决方案如下:
tail -f `ls -tr | tail -n 1`
tail -f `ls -tr | grep SoftwareLog | tail -n 1`
现在,如果您的目录包含其他日志文件,如“SystemLog”,并且您只需要最新的“SoftwareLog”文件,那么您只需包含一个grep,如下所示:
tail -f `ls -tr | tail -n 1`
tail -f `ls -tr | grep SoftwareLog | tail -n 1`
然后将其运行为:tail.sh'SoftwareLog*'
如果在检查之间写入日志,脚本将丢失一些日志行。但至少它是一个脚本,不需要符号链接。我们有每日循环日志文件:
/var/log/grails/customer-2020-01-03.log
。对于tail
最新的一个,以下命令对我来说效果很好:
tail -f /var/log/grails/customer-`date +'%Y-%m-%d'`.log
(注意:表达式中的+
符号后没有空格)
因此,对于您来说,以下内容应该可以工作(如果您在同一个日志目录中):
谢谢,我可能不得不这么做。我研究了multitail,但不幸的是它只是交互式的,这意味着我不能将它的输出输送到其他地方。我会试试看,看看我能得到什么。问题是,我想这只运行时,尾巴运行和退出时,退出,我不知道如何做到这一点。谢谢!这基本上是我喜欢的唯一解决方案(我为此搜索了很多)。编辑以修复一个我第一次无法使用的bug。(因为getCurrentlySymlinkedFile返回的是一个空字符串,输入错误的lastModifiedDate也被计算为一个空字符串。)或者使用head而不是tail,使事情更简单=)ls-t | head-1 | xargs tail-FOr可以使用:
tail-f SoftwareLog。`date+'%Y-%m-%d-%H`
tail -f SoftwareLog.`date +'%Y-%m-%d-%H'`