FessのAI検索モード(RAG)を使っていると、LLM関連のログがfess.logに混ざってしまい、問題の切り分けがしづらいことがあった。そこで、LLM関連のログを専用のfess-llm.logに分離し、管理画面からログレベルを変更できるようにしました。
なぜ分離したのか
AI検索モードではLLMとのやり取りが発生するため、デバッグ時にはそれなりの量のログが出力される。これが通常の検索やクロールのログと一緒にfess.logに書き込まれると、必要な情報を探すのが大変になる。LLM関連のログを別ファイルに分けることで、AI検索モードの問題調査がやりやすくなる。
変更内容
fess-llm.logの追加
log4j2.xmlにLlmFileというRollingFileアペンダーを追加し、以下の4パッケージのログをfess-llm.logに出力するようにした。
org.codelibs.fess.llmorg.codelibs.fess.chatorg.codelibs.fess.api.chatorg.codelibs.fess.app.web.chat
これらのロガーにはadditivity="false"を設定しているので、LLM関連のログはfess.logには出力されなくなる。ログのローテーション設定は既存のfess.logと同じ(時間+サイズベース、gzip圧縮)にしてある。
管理画面からのログレベル変更
管理画面の「一般設定」→「ログ設定」セクションに、LLM用のログレベルセレクターを追加した。選択できるレベルは以下の通り。
- OFF
- ERROR
- WARN
- INFO(デフォルト)
- DEBUG
- TRACE
ログレベルの変更はサーバーの再起動なしで即座に反映される。SystemHelperのsetLlmLogLevel()メソッドで、Log4j2のConfigurator.setLevel()を使って対象パッケージのログレベルを動的に変更している。
システムプロパティ
fess.llm.log.levelというシステムプロパティでも初期ログレベルを指定できる。未設定の場合はINFOがデフォルトになる。
既存環境への影響
既存のログファイルへの影響はない。fess-llm.logは新規に追加されるファイルで、デフォルトのログレベルはINFOなので、特に設定を変更しなくてもそのまま使える。