Ubuntu

apache 2 中使用萬用字元子域的動態錯誤和自定義日誌

  • May 25, 2020

我正在嘗試為 apache2 製作萬用字元 VirtualHost conf 文件,但我不確定如何處理ErrorLogCustomLog設置以將日誌放在我希望它們去的地方。正如您在第二個中看到的那樣VirtualHost,我將日誌放在logs域中的一個文件夾中DocumentRoot。這適用於 static VirtualHost,但我將如何處理萬用字元VirtualHost。例如,第一個VirtualHost.

NameVirtualHost *:80

# Wild card all subdomains
<VirtualHost *:80>
       ServerAlias *.example.com
       VirtualDocumentRoot /var/www/%0/public
       ErrorLog ?????
       CustomLog ????? combined
</VirtualHost>


# Main domain
<VirtualHost *:80>
       ServerName example.com
       ServerAlias www.example.com
       DocumentRoot /var/www/example.com/public
       ErrorLog /var/www/example.com/logs/error.log
       CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>

我已經嘗試過ErrorLog /var/www/*.example.com/logs/error.logErrorLog /var/www/%0/logs/error.log並且相同CustomLog,但是當我嘗試重新啟動 apache 時,它會引發錯誤。

我應該使用什麼語法來獲得ErrorLog上面範例的工作版本?

在帶有動態日誌的虛擬主機中看到了萬用字元?,但這並不是我真正想要的,因為它仍然最終將所有日誌放入一個大文件中,而不是將它們拆分到自己的子域特定文件夾中。

冒著給您更多工作的風險,您可能還想考慮採取相反的方向並將所有日誌文件合併到syslog. 這似乎更令人生畏,但它是一個更有能力的解決方案。我根本不再關心單獨的日誌,只需將所有日誌直接通過管道傳輸到系統日誌(它將所有內容保存在 /var/log/messages 中)。

儘管 Apache 本身並沒有這樣做,但您可以像這樣實現它……

LogLevel info
ErrorLog  "| /usr/bin/logger -thttpd -plocal6.err"
CustomLog "| /usr/bin/logger -thttpd -plocal6.notice" "%v %h %l %u %t \"%r\" %>s %b"

Syslog 將為您提供很多選項,因為設置了大量的服務和實用程序來解析和管理它。我lnav個人喜歡使用,您可以過濾、排序、搜尋等,並且 ssh 上的界面是彩色的,因此很容易發現問題。您還可以使用實用程序將所有這些傳遞到一個沒有限制的 SQL 數據庫中,或者為了減少工作量,您可以使用具有漂亮儀表板的商業服務,如datadog :)。

您需要閱讀設施local1-7

在上面的定義中,我將我的訪問日誌和錯誤日誌都傳送到logger該實用程序中,該實用程序旨在接受日誌並在 syslog 中以通用格式記錄它們以及提供它們的服務的詳細資訊。您可以看到這%v是我的訪問日誌的第一部分,它可以輕鬆過濾 syslog 中的虛擬主機。

您會在指令中註意到,錯誤日誌使用local6.err而訪問日誌使用local6.notice,這實際上設置了日誌行的級別,錯誤最終將在 中塗成紅色lnav,而其他錯誤將是標準/資訊。

當心兔子洞;)

引用自:https://serverfault.com/questions/1017378