Php
如何讓 Logwatch 跟踪 git 送出
我有一個帶有 git repo 的網路伺服器,其中包含一個網站。我使用 PHP 製作了一個 CMS,其中 PHP 在文件更改時自動送出到 git。我想
git log --name-status
使用 Logwatch 跟踪這些送出(最好以接近顯示添加/刪除文件的形式)。我已經閱讀了有關創建自定義 Logwatch 服務的資訊,但 Logwatch 對我來說真的很新,而且這並沒有真正讓我有任何收穫。
**注意:**如果您想跟踪所有 git 送出(而不僅僅是使用 PHP 送出的那些),而不是下面的 PHP 程式碼,應該可以設置一個具有類似輸出的 post-commit 掛鉤。
剛寫完這個問題,我就遇到了這個非常簡單的指南。基於此,這就是我所做的:
創建日誌目錄並設置權限
在沒有設置權限的情況下,我沒有對此進行測試,但我認為它是必需的。
sudo mkdir /var/log/gitweb sudo chown: www-data /var/log/gitweb
PHP git 日誌功能
git commit
每當我在 php 程式碼中執行時,都會執行這行程式碼。換行符被替換為自定義字元串,以便每次送出都在自己的行上(據我所知,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
日誌觀察解析器
這做了兩件事:
- 時間過濾(它只列印具有正確日期的行/送出)
- 將 cusstrom 字元串轉換回換行符(參見上面的 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 }