現在、システムに出入りするすべてのXMLドキュメントを一般的にログに記録しており、一部のドキュメントにはパスワードが平文で含まれています。これを実行しているログバックロガー/アペンダーを構成して、パターンマッチングなどを実行し、パスワードが存在することを検出した場合は、パスワードを置き換えることができるようにしたいと考えています(ほとんどの場合アスタリスクを使用)。ログエントリを除外したくないことに注意してください。ログエントリの一部をマスクしたいのです。これがログバックでどのように行われるかについてのアドバイスをいただければ幸いです。ありがとう。
2 に答える
logback バージョン 0.9.27 では、置換機能が導入されました。置換は正規表現をサポートします。たとえば、ログに記録されたメッセージが「userid=alice, pswd='my secret'」で、出力パターンが
"%d [%t] $logger - %msg%n",
パターンを変更するだけです
"%d [%t] $logger - %replace(%msg){"pswd='.*'", "pswd='xxx'"}%n"
上記はオプションの引用を利用していることに注意してください。
以前のログ メッセージは、「userid=alice, pswd='xxx'」として出力されます。
最高のパフォーマンスを得るには、ログ ステートメントを CONFIDENTIAL としてマークし、%replace に CONFIDENTIAL としてマークされたログ ステートメントのみを置換するように指示することもできます。例、
Marker confidential = MarkerFactory.getMarker("CONFIDENTIAL");
logger.info(confidential, "userid={}, password='{}'", userid, password);
残念ながら、現在のバージョンの logback はまだ条件付き置換 (マーカーなどに基づく) をサポートしていません。ただし、ReplacingCompositeConverter を拡張することで、独自の置換コードを簡単に作成できます。さらに支援が必要な場合は、logback-user メーリング リストで叫んでください。
マスキングは、テクノロジーやログ システムの側面ではなく、ビジネスの側面であると思います。法的な理由により、パスワード、国民 ID などを DB に保存する際にもマスクする必要がある場合があります。ロガーに渡す前に、xml をマスクできるはずです。
それを行う 1 つの方法は、その作成を行う XSLT を介して XML を実行し、それをロガーに渡してログを記録することです。
これを行いたくない場合、LogBack にはオプションの 1 つであるフィルター サポートがあります (ただし、適切なものではありません)。
ただし、ロギング インフラストラクチャ レベルで見つけようとしている一般的なすぐに使えるソリューションは、すべてのログ メッセージのマスキングがチェックされるため、最適ではないことを理解してください。