Fessでは、スクリプトの実行内容をaudit.logに出力する機能がありますが、実際に運用してみると、ログが長すぎて扱いにくいという問題がありました。今回、スクリプト監査ログの最大長を設定可能にし、あわせて文字列の正規化処理の順序も修正しました。
問題点
以前の実装では、スクリプトの監査ログに記録されるテキストの最大長が1000文字にハードコードされていました。スクリプトの実行内容をaudit.logに出力するようにしていましたが、ログが長くなりすぎて確認しづらく、実用的ではありませんでした。
また、文字列の正規化処理の順序にも問題がありました。制御文字(改行、タブなど)の置換を先に行ってから切り詰めていたため、切り詰め位置を超えた部分の制御文字まで不要に処理されていました。
改善内容
最大長の設定プロパティ追加
fess_config.propertiesにscript.audit.log.max.lengthプロパティを追加し、監査ログに記録するスクリプトテキストの最大長を設定できるようにしました。デフォルト値は100です。
# スクリプト監査ログの最大長(デフォルト: 100)
script.audit.log.max.length=100
以前のデフォルト値1000文字で運用していた環境では、必要に応じて明示的に設定してください。
script.audit.log.max.length=1000
正規化処理の順序修正
ActivityHelper.normalizeScript()メソッドで、処理の順序を変更しました。
変更前: 制御文字の置換 → 切り詰め
変更後: 切り詰め → 制御文字の置換
これにより、切り詰め位置を超えた部分の制御文字に対する不要な処理がなくなり、効率的になりました。
GroovyEngineの最適化
GroovyEngineでは、監査ログが無効な場合の早期リターンを追加しました。初期化時にscriptAuditLogEnabledフラグをキャッシュしておくことで、監査ログが無効な場合はlogScriptExecution()メソッドで無駄な処理を行わずに即座にリターンします。また、getCurrentScheduledJob()でのnullチェックも追加しています。
まとめ
スクリプトの実行内容をaudit.logに出力する機能自体は便利ですが、実際に使ってみると、ログが長すぎて扱いにくいという問題がありました。今回の改善で、最大長を環境に合わせて設定できるようになり、処理効率も向上しました。この変更はFess 15.6.0で利用可能になる予定です。