shell - 如何像 log4j 那样将输出通过管道传输到 shell 中的旋转日志文件?

标签 shell io-redirection

我正在使用 IO 重定向将输出记录到日志文件中。但我希望能够在当天发生变化时将日志移动到不同的文件,例如 2017-08-18.log

我尝试使用>xxx.log重定向来清除日志文件,但所有内容都重新出现在新日志中?

如何设置日志重定向?谢谢。

最佳答案

如果您熟悉 Perl,您可以运行这个小脚本:

use POSIX qw(strftime);

$fbase = "tmp-%Y-%m-%d-%H-%M.log";

while(<>)
{
  $fnamenew = strftime $fbase, localtime;

  if ($fnamenew ne $fname)
  {
    print "logging to: $fnamenew\n";
    $fname = $fnamenew;
    close OUT;
    open OUT, ">$fname";
  }
  print OUT $_;
}

像这样使用:$mycomputation | perl script.pl 。它将把所有输入附加到根据给定时间模式构建的文件名中,此处 tmp-YYYY-MM-DD-HH-MI.log 。在每一新输入行上,都会重建模式并对照旧模式进行检查。如果不同,则输入将通过管道传输到新文件,并关闭旧文件。

关于shell - 如何像 log4j 那样将输出通过管道传输到 shell 中的旋转日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45747519/

相关文章:

shell - 在后台运行 CakePHP Shell

linux - 找到 exec rm : No such file or directory

bash - 如何在 SFTP 执行结束时执行 shell 脚本?

php - shell中的其他expect命令

bash - 重定向和进程替换的顺序

linux - 如何在 Linux 启动时覆盖文件?

linux - 查找抛出路径必须先于脚本中的表达式

linux - 如何避免在 Linux 上创建 tmp 文件?

bash - 在 bash 中,如何打开外部可重定向的可写文件描述符?

php - 如何将调用程序的输出重定向到文件?