Logwatch가 git 커밋을 추적하도록 하는 방법

Logwatch가 git 커밋을 추적하도록 하는 방법

웹사이트가 포함된 git 저장소가 포함된 웹 서버가 있습니다. 파일이 변경되면 PHP가 자동으로 git에 커밋되는 PHP를 사용하여 CMS를 만들었습니다. Logwatch를 사용하여 이러한 커밋을 추적 하고 싶습니다 git log --name-status(바람직하게는 추가/제거된 파일을 표시하는 데 가까운 형식으로). 사용자 정의 Logwatch 서비스를 만드는 방법에 대해 읽었지만 Logwatch는 나에게 정말 새로운 것이며 이것이 실제로 나에게 도움이 되지는 않습니다.

답변1

노트:(PHP를 사용하여 커밋된 커밋뿐만 아니라) 모든 git 커밋을 추적하려면 아래 PHP 코드 대신 유사한 출력으로 커밋 후 후크를 설정하는 것이 가능해야 합니다.


내가 찾은 질문을 쓴 후이 매우 간단한 안내서. 이를 토대로 제가 한 일은 다음과 같습니다.

로그 디렉터리 생성 및 권한 설정

권한을 설정하지 않고 이것을 테스트하지는 않았지만 이것이 필요하다고 가정합니다.

sudo mkdir /var/log/gitweb
sudo chown: www-data /var/log/gitweb

PHP git 로그 기능

git commitPHP 코드를 실행할 때마다 이 코드 줄이 실행됩니다. 줄 바꿈은 사용자 정의 문자열로 대체되어 각 커밋이 자체 줄에 표시됩니다(내가 아는 한 Logwatch는 한 줄씩만 작동합니다). Logwatch를 사용하여 구문 분석할 때 이는 개행 문자로 대체됩니다.

shell_exec('(git log -1 --date=iso --name-status | awk 1 ORS="[NEWLINE_HERE]" ; echo) >> /var/log/gitweb/gitweb.log');

Logwatch 로그 파일 그룹

# /etc/logwatch/conf/logfiles/gitweb.conf

LogFile = gitweb/*.log
Archive = gitweb/*.gz
*ExpandRepeats

*ExpandRepeats가 무엇을 하는지 잘 모르겠지만 제가 링크한 가이드에 나와 있습니다.

웰 로깅 서비스

# /etc/logwatch/conf/services/gitweb.conf

Title = "Git commits"
LogFile = gitweb

로그 관찰 파서

이는 두 가지 작업을 수행합니다.

  • 시간 필터링(올바른 날짜의 행/커밋만 인쇄)
  • 사용자 정의 문자열을 개행 문자로 다시 변환합니다(위의 PHP 코드 참조).

나는 Perl에 대한 지식이 전혀 없습니다(도움을 얻기 위해 다른 Logwatch 스크립트를 살펴보았습니다). 따라서 이것이 Perl-y에 대한 모든 것에 대한 신성 모독이라면 사과드립니다.

use Logwatch ':dates';

my $filter = TimeFilter('%Y-%m-%d %H:%M:%S');

while (defined(my $ThisLine = <STDIN>)) {
   if ($ThisLine =~ /$filter/) {
      $ThisLine =~ s/\[NEWLINE_HERE\]/\n/g;
      print $ThisLine;
   }
}

exit(0);

로그 순환 설정

# /etc/logrotate.d/gitweb

/var/log/gitweb/*log {

    daily

    # keep 10 old logs
    rotate 10

    # don't do anything if the log is missing
    missingok

    # don't do anything if the log is empty
    notifempty

    # zip the archived logs
    compress
}

관련 정보