Webサイトを含むgitリポジトリを含むWebサーバーがあります。ファイルが変更されると、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 commit
PHPコードを実行するたびに、このコード行が実行されます。改行はカスタム文字列に置き換えられ、各コミットは独自の行に表示されます(私が知っている限り、Logwatchは1行ずつしか機能しません)。 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
ログ観測パーサー
これは2つのことを行います。
- 時間フィルタリング(正しい日付の行/コミットのみを印刷)
- カスタム文字列を改行文字に変換し直します(上記の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
}