一尘不染

如何使用给定模式尾部-f最新日志文件

linux

我使用一些每小时都会创建一个日志文件的日志系统,如下所示:

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])

但是通配符语句在传递给尾部之前已被挽救,并且不会在每次重试尾部时重新执行。

有什么建议么?


阅读 242

收藏
2020-06-07

共1个答案

一尘不染

[编辑:快速搜寻工具后]

你可能会想尝试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”]

2020-06-07