[Solr]ロギングについてのTips

動的にログレベルを変更する

管理画面から

Solrの管理画面 Logging → Level で Solr 稼働中にログレベルを変更できます。
特定のクラスのログ出力だけを変更することもできますし、rootを変更することで全体を変更することもできます。

APIで

以下のようにAPIを呼び出すことでログレベルを変更できます。

curl -s http://localhost:8983/solr/admin/info/logging --data-binary "set=root:WARN"

設定ファイルの場所を指定する

環境変数 LOG4J_PROPS で log4j2.xml の場所を指定します。

LOG4J_PROPS=/var/solr/log4j2.xml

ログの出力先を指定する

環境変数 SOLR_LOGS_DIR でログの出力先を指定します。

SOLR_LOGS_DIR=/var/solr/logs

日付ベースのログローテーションにする

log4j2.xml の MailLogFile の設定を以下のように変更します。

<RollingRandomAccessFile
    name="MainLogFile"
    fileName="${sys:solr.log.dir}/solr.log"
    filePattern="${sys:solr.log.dir}/solr.log.%d{yyyyMMdd}" >
  <PatternLayout>
    <Pattern>
      %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%notEmpty{\
 =>%ex{short}}}{10240}%n
    </Pattern>
  </PatternLayout>
  <Policies>
    <TimeBasedTriggeringPolicy interval="1"/>
  </Policies>
  <DefaultRolloverStrategy max="10"/>
</RollingRandomAccessFile>

TimeBasedTriggeringPolicy の interval=1 が1日単位という意味になるのは、filePattern に含まれる最小の単位が日だからです。filePattern に HH が含まれていれば interval=1 は1時間単位の意味になり、 mm が含まれていれば1分単位になります。

log4j2をアップデートする

Solr の配布物に含まれる log4j2 関連の jar ファイルは以下の通りです。

  • server/lib/ext/log4j-slf4j-impl-2.14.1.jar
  • server/lib/ext/log4j-layout-template-json-2.14.1.jar
  • server/lib/ext/log4j-core-2.14.1.jar
  • server/lib/ext/log4j-1.2-api-2.14.1.jar
  • server/lib/ext/log4j-api-2.14.1.jar
  • server/lib/ext/log4j-web-2.14.1.jar

log4j2 をアップデートするときはこれらのファイルを置き換えます。

prometheus-exporter を利用している場合は以下のファイルの置き換えも必要です。

  • contrib/prometheus-exporter/lib/log4j-slf4j-impl-2.14.1.jar
  • contrib/prometheus-exporter/lib/log4j-core-2.14.1.jar
  • contrib/prometheus-exporter/lib/log4j-api-2.14.1.jar
Related Post