如何解决如何使用给定模式尾部-f最新日志文件
[编辑:快速搜寻工具后]
你可能会想尝试multitail -http://www.vanheusden.com/multitail/
如果您想坚持Dennis Williamson的回答(我已经对他进行了+1),那么这里是您的空白。
在您的Shell中,运行以下脚本(或等效于zsh的脚本,在看到zsh标记之前,我先用bash编写了该脚本):
#!/bin/bash
TARGET_DIR="some/logfiles/"
SYMLINK_FILE="SoftwareLog.latest"
SYMLINK_PATH="$TARGET_DIR/$SYMLINK_FILE"
function getLastModifiedFile {
echo $(ls -t "$TARGET_DIR" | grep -v "$SYMLINK_FILE" | head -1)
}
function getCurrentlySymlinkedFile {
if [[ -h $SYMLINK_PATH ]]
then
echo $(ls -l $SYMLINK_PATH | awk '{print $NF}')
else
echo ""
fi
}
symlinkedFile=$(getCurrentlySymlinkedFile)
while true
do
sleep 10
lastModified=$(getLastModifiedFile)
if [[ $symlinkedFile != $lastModified ]]
then
ln -nsf $lastModified $SYMLINK_PATH
symlinkedFile=$lastModified
fi
done
使用普通方法(同样,我不知道zsh,所以可能有所不同)来后台处理该过程…
./updateSymlink.sh 2>&1 > /dev/null
然后tail -F $SYMLINK_PATH
,使尾巴可以更改符号链接或旋转文件。
这有点令人费解,但是我不知道用尾巴做这件事的另一种方法。如果其他人知道可以处理此问题的实用程序,请让他们向前走,因为我也很想亲自查看它- 默认情况下,如Jetty之类的应用程序会以这种方式记录日志,并且我总是编写在cron上运行的符号链接脚本以补偿为了它。
[编辑:从其中一行的末尾删除了错误的’j’。您还存在一个错误的变量名称“ lastModifiedFile”,该名称不存在,您设置的正确名称是“ lastModified”]
解决方法
我使用一些每小时都会创建一个日志文件的日志系统,如下所示:
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])
但是通配符语句在传递给尾部之前已被挽救,并且不会在每次重试尾部时重新执行。
有什么建议么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。