Sonarcloudアラート「足りない引数」SLF4Jを使用してログインする例外

ダニエルWiddis:

私はJavaでのオープンソースプロジェクトを管理し、私は次のパターンを使用して例外をログ私のコードでは、約20ヶ所を持っている(SLF4Jバージョン1.7.30)

private static final Logger logger = LoggerFactory.getLogger();

... 

try {
  interfaces = NetworkInterface.getNetworkInterfaces(); 
} catch (SocketException ex) {
  logger.error("Socket exception when retrieving interfaces: {}", ex);
}

または同様に

try {
  // stuff
} catch (IOException ioe) {
  logger.error("Server error: {}", ioe);
}

今日から、SonarCloud自動化されたコードの品質レビューがルールでこれらのフラグを立てる始めているjava:S2275特定のメッセージを持つ(printf形式の文字列は、実行時に予期しない動作につながるべきではありません)「が足りません引数を指定します。」

EDITは:注目すべきは、これは時に一貫起こるように見えるException最後の引数です。次のパターンは行いませんフラグ:

try {
  // Server connection code
} catch (IOException e) {
  logger.error("Server Connection error: {}", e.getMessage());
}

レビューこの他のStackOverflowの質問は、私はそれがここに適用すると、なぜそれが突然変更する方法をクリアしていないよので、例外のための余分な引数は省略可能であり、異なる動作になるでしょう、おそらくそれを示しています。

そこに何かが私は/より良いメッセージを記録するためにこれらの例外を(例えば、使用翻訳するためにやるべきことができますされgetMessage()、それらのすべての代わりに、自動化に頼るのtoString()解析)、またはこれは偽陽性のですか?

(私の20件の問題のソナーの一覧はこちらをリンクさ。)

アダムKotwasinsは次のとおりです。

これは純粋な推測ですが、として一般化することができるログ行に発行ポイントの各:

LOG.something(format, custom_arguments, exception)

フォーマットた場所{}に現れるcount(custom_arguments) + 1(図1は、例外のために予約します)。

あなたが見てきたようにリンクされ、答えを、それが何らかの理由でSonarCloudが同じことをやっている可能性がありますので、例外は、SLF4Jで特別扱います。残念ながらドキュメントはありません。

「修正は」最終取り除くことであろう{}例えばので、例外のために意図を

LOG.error("boom: {}", e);
LOG.error("boom2 {}: {}", something, e);

となり

// exceptions handled in a special way
LOG.error("boom", e);
LOG.error("boom2 {}", something, e);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=276247&siteId=1