Perl을 사용한 로그 회전 Logfile::Rotate

Perl을 사용한 로그 회전 Logfile::Rotate

다음 스크립트는 CentOS에서 실행될 때 작동하지만 크기에 따라 로그를 회전하지 않습니다. 이 스크립트가 실행될 때마다 새 로그가 생성됩니다. 누구든지 이 스크립트를 크기에 따라 작동하게 만드는 방법을 말해 줄 수 있습니까?

#!/usr/bin/perl
use Logfile::Rotate;
my $logfile = new Logfile::Rotate(
  File => '/var/log/remotehost/fakepath/Syslog.log',
  Count => 100,
  Gzip => '/usr/bin/gzip',
  size => 1*1024*1024,
  sub {
    open my $PID, '<', '/usr/lib/systemd/system/rsyslog.service' or
    die "Unable to open pid file:$!\n";
    chomp(my $pid = <$PID>);
    close $PID;
    kill 'HUP', $pid;
  }
);
# Log file locked (really) and loaded. Now let's rotate it.
$logfile->rotate();
# make sure the log file is unlocked (destroying object unlocks file)
undef $logfile;

답변1

크기에 따라 회전하지 않는다는 사실은 Logfile::Rotate문서에 회전에 대한 언급이 없기 때문에 놀랄 일이 아닙니다. 아마도 크기를 기준으로 회전하는 가장 쉬운 방법은 다음과 같이 호출을 rotateif로 래핑하는 것입니다.

if (-s '/var/log/remotehost/fakepath/Syslog.log' > 1048576) {
    $log->rotate();
}

지정된 파일이 1MB(바이트 단위 크기)보다 큰 경우에만 로그가 회전됩니다.

관련 정보