当前位置: 首页 > 面试题库 >

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

司徒焕
2023-03-14
问题内容

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

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

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

有什么建议么?


问题答案:

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

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



 类似资料:
  • 问题内容: 我想在不阻塞或锁定的情况下在Python中提供tail -F或类似内容的输出。我在这里找到了一些非常老的代码来执行此操作,但是我认为现在必须有更好的方法或库来执行相同的操作。有人知道吗? 理想情况下,我希望每次需要更多数据时都可以打电话给我。 问题答案: 非阻塞 如果你使用的是Linux(因为Windows不支持在文件上调用select),则可以将subprocess模块​​与sele

  • 问题内容: 如何使用Python中的日志记录模块写入文件?每当我尝试使用它时,它只会打印出消息。 问题答案: 一个使用而不是一个例子 按顺序,这五个部分执行以下操作: 设置输出文件() 将其设置为追加而不是覆盖() 确定输出消息的格式() 确定输出时间的格式() 并确定它将接受的最低消息级别()。

  • 问题内容: 您将如何实现一个包含文本区域的jsp站点,该文本区域显示(tomcat)服务器上的日志文件并自动刷新。 我认为刷新很容易使用setTimeout轮询到服务器并发送ajax请求。但是问题是如何监视服务器上的文件(它是一个Log4J日志文件- 也许我可以使用自己的附加程序?)进行更改,并在ajax请求到达时仅发送更改后的行? 我不知道如何检测日志中更改的行… 问题答案: ajax并每隔几秒

  • 目前我正在使用Spring Boot日志,我正在通过属性文件配置它,下面是示例日志属性 问题是日志文件备份格式是. gz格式,就像logT一样est.log.2019-06-14.0.gz 如何排除默认的拉链? 我不想在xml文件中硬连线配置并将其放在资源文件夹中。我只能将滚动appender配置xml文件,但我想在属性文件中创建日志文件路径,这样我就可以为不同的环境动态设置它。 有没有办法实现这

  • 我有一个powershell脚本,我用这种方式保存日志 在Python中如何使用它?

  • 问题内容: 我想使用Java util日志记录按照以下格式为每个请求创建日志文件。 有人请告诉我如何使用Java util日志记录来实现这一目标? 问题答案: 该文件处理器不支持通过生成的文件名的日期和时间从日志管理。 如果要在启动时生成文件名,则可以将FileHandler子类化,并创建一个静态方法来使用SimpleDateFormat生成文件名。该日志管理支持“配置”选项,也将让您安装自定义代