当社はちょうどソナーファームを開始しました。コード品質が不思議で、改善したいと思っていました。ソナー違反:条件付きでのみメソッドを呼び出す
私は、このようなロガーの呼び出しを含むコードを持っている:
LOGGER.error(String.format("Cannot load object in status %s (%s)", status, statusDescription), e);
LOGGER.info(String.format("%s object(s) loaded in status %s (%s)", objects.size(), status, statusDescription));
ソナーは、ルールのイカをトリガー:S262、Invokeメソッド(複数可)のみ条件付きで「前提条件」とロギングの引数が評価を要求してはなりません。これらの行の両方によってトリガされるルール。
この1つについては、何が起こっているのか分かりません。説明の縫い目は私のユースケースにあまり合わない。 Sonarのドキュメントでは、この例を提供しています:
logger.log(Level.DEBUG, "Something went wrong: " + message); // Noncompliant; string concatenation performed even when log level too high to show DEBUG messages
私は完全に理解しています(デバッグは生産には記録されないため、不要な操作が発生します)。しかし、情報とエラーレベルについては、とにかくログに記録したいと思うでしょう。さらに、私の場合、両方を記録したいと思っています。
どちらが良いアプローチですか? String.formatを使用しないで別の書き換えですか?情報/エラーレベルでソナーを起動しないでください。このソナーを無視するだけですか?他に何か?