設定記錄

Solr 記錄是了解系統中發生情況的關鍵方式。有多種方式可以調整預設的記錄設定。

暫時記錄設定

有多種方式可以在需要時暫時變更記錄層級。

記錄畫面

您可以使用管理介面暫時變更 Solr 的記錄輸出量。選取左側選單中的 記錄] 連結。

請注意,記錄層級也會在下次重新啟動 Solr 時重設。

Logging Screen
圖 1. 記錄畫面

管理 Web 介面的這一部分可讓您設定許多不同記錄類別的記錄層級。幸運的是,任何未設定的類別都會具有其父系的記錄層級。這使得可以透過調整其父系的記錄層級,一次變更許多類別。

當您選取選單:記錄[層級]時,會看到以下選單

image
圖 2. 記錄層級選單

Solr 類別會以目錄樹狀結構顯示在左欄中,代表類別路徑。目前的層級會顯示在右欄中。

目錄會顯示其目前的記錄層級。以黃色反白的列表示該類別目前已啟用記錄。記錄層級選單會浮動在這些之上。若要設定特定目錄的記錄層級,請按一下右欄中的目前層級,然後會出現記錄層級選單。選取您想要的記錄層級旁邊的按鈕。

記錄層級變更將會分散到叢集中的所有節點。

可能的記錄層級如下

層級 結果

全部

回報所有內容。

追蹤

回報所有內容,但最不重要的訊息除外。

除錯

回報設定錯誤。

資訊

回報所有內容,但一般狀態除外。

警告

回報所有警告。

錯誤

僅回報最嚴重的警告。

嚴重

僅回報嚴重事件。

關閉

關閉記錄。

未設定

移除先前的記錄設定。

允許一次進行多個設定。

記錄層級 API

還有另一種方式可以將 REST 命令傳送至 admin/info/logging 端點來執行相同的操作。

範例

  • V1 API

  • V2 API

curl -X GET "https://127.0.0.1:8983/solr/admin/info/logging?set=root:WARN"
curl -X PUT https://127.0.0.1:8983/api/node/logging/levels -H 'Content-Type: application/json' -d '
  [
    {"logger": "root", "level": "WARN"}
  ]
'

在啟動時選擇記錄層級

您可以在啟動 Solr 時暫時選擇不同的記錄層級。有兩種方式

第一種方式是在啟動 Solr 之前設定 SOLR_LOG_LEVEL 環境變數,或將相同的變數放置在 bin/solr.in.shbin/solr.in.cmd 中。變數必須包含具有支援記錄層級 (請參閱上方) 的大寫字串。

第二種方式是使用 -v 或 -q 選項啟動 Solr,詳細資訊請參閱Solr 控制腳本參考。範例:

# Start with verbose (DEBUG) looging
bin/solr start -f -v
# Start with quiet (WARN) logging
bin/solr start -f -q

永久記錄設定

Solr 使用 Log4J 2.21.0 版進行記錄,並使用 server/resources/log4j2.xml 進行設定。請花一點時間檢視 log4j2.xml 檔案的內容,以便熟悉其結構。

預設情況下,Solr 記錄訊息會寫入 SOLR_LOGS_DIR/solr.log。記錄訊息的格式可以透過修改 <PatternLayout/> 中使用的模式,或變更版面配置實作來更改,例如可以使用 <JsonTemplateLayout/> 來設定 JSON 格式的記錄檔。

當您準備在生產環境中部署 Solr 時,請將變數 SOLR_LOGS_DIR 設定為您希望 Solr 寫入記錄檔的位置,例如 /var/solr/logs。您可能還需要調整 log4j2.xml。請注意,如果您使用將 Solr 部署到生產環境中提供的指示將 Solr 安裝為服務,則請參閱 /var/solr/log4j2.xml,而不是預設的 server/resources 版本。

在前台啟動 Solr (-f 選項) 時,所有記錄除了寫入 solr.log 之外,還會傳送到主控台。在背景啟動 Solr 時,它會將所有 stdoutstderr 輸出寫入 solr-<port>-console.log 中的記錄檔,並自動停用在 log4j2.xml 中設定的 CONSOLE 記錄器,效果與您手動從 rootLogger 中移除 CONSOLE appender 相同。

此外,在 log4j2.xml 中,如果預設的記錄輪換大小閾值 32MB 對於生產伺服器來說太小,您應該將其增加到更大的值 (例如 100MB 或更大)。

<SizeBasedTriggeringPolicy size="100 MB"/>

Java 垃圾回收記錄會在大小達到 20MB 時由 JVM 輪換,最多 9 代。

每次啟動或重新啟動 Solr 時,log4j2 都會執行記錄輪換。

記錄慢速查詢

對於高流量的搜尋應用程式,記錄每個查詢可能會產生大量的記錄,並且根據流量的大小,可能會影響效能。如果您挖掘這些記錄以深入了解您的應用程式,那麼記錄每個查詢請求可能會很有用。

另一方面,如果您只關心與請求相關的警告和錯誤訊息,則可以將記錄詳細程度設定為 WARN。但是,這會產生一個潛在的問題,那就是您不會知道是否有任何查詢很慢,因為慢速查詢仍然以 INFO 層級記錄。

Solr 提供了一種方法,可以將您的記錄詳細程度閾值設定為 WARN,並設定一個延遲閾值,超過該閾值則將請求視為「慢速」並以 WARN 層級記錄該請求,以幫助您識別應用程式中的慢速查詢。若要啟用此行為,請在 solrconfig.xmlquery 區段中設定 <slowQueryThresholdMillis> 元素。

<slowQueryThresholdMillis>1000</slowQueryThresholdMillis>

任何花費時間超過指定閾值的查詢都將以 WARN 層級記錄為「慢速」查詢。您可以在名為 solr_slow_requests.log 的記錄檔中找到所有這些查詢,並且該檔案將位於您的 SOLR_LOGS_DIR 中 (有關定義記錄位置的更多資訊,請參閱永久記錄設定)。

記錄選取的請求參數

除了上述記錄選項之外,還可以只記錄選取的請求參數清單 (例如與查詢一起傳送的參數),並使用一個名為 logParamsList 的額外請求參數。有關更多資訊,請參閱logParamsList 參數一節。

在 SolrCore 上選擇性記錄

Solr 使用 o.a.s.c.SolrCore.Request 以 INFO 層級記錄所有核心請求。您可以透過將這些記錄器的層級變更為 WARN 或 ERROR 來完全停用此功能,或者透過在 log4j2.xml 中使用請求路徑上的 MarkerFilter 來更選擇性地停用。

例如

<Logger name="org.apache.solr.core.SolrCore.Request" level="info">
  <Filters>
    <MarkerFilter marker="/get" onMatch="DENY" onMismatch="NEUTRAL"/>
    <MarkerFilter marker="/replication" onMatch="DENY" onMismatch="NEUTRAL"/>
  </Filters>
</Logger>

請求記錄

預設情況下,每個傳入的 HTTP(s) 請求都以標準的 NCSA 格式記錄在名為 $SOLR_LOG_DIR/<yyyy_mm_dd>.request.log 的檔案中,並每天輪換。預設情況下,會保留 3 天的請求記錄。您可以透過環境變數或在 solr.in.sh/solr.in.cmd 中設定 SOLR_REQUESTLOG_ENABLED=false 來停用請求記錄。您可以透過系統屬性 -Dsolr.log.requestlog.retaindays 來變更保留的天數。