設定記錄
Solr 記錄是了解系統中發生情況的關鍵方式。有多種方式可以調整預設的記錄設定。
暫時記錄設定
有多種方式可以在需要時暫時變更記錄層級。
記錄畫面
您可以使用管理介面暫時變更 Solr 的記錄輸出量。選取左側選單中的 記錄] 連結。
請注意,記錄層級也會在下次重新啟動 Solr 時重設。

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

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.sh
或 bin/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 時,它會將所有 stdout
和 stderr
輸出寫入 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.xml
的 query 區段中設定 <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
來變更保留的天數。