次のコードを検討してください。
if (param1 == null || param2 == null) {
logger.error("Failed to do stuff.");
logger.debug("param1: " + param1);
logger.debug("param2: " + param2);
}
非常に読みやすいですが、マルチスレッド環境では、論理的にアトミックなログ メッセージが 3 つの部分に分割される可能性があります。
さて、ソリューションの一部は単純で、読みやすさはそれほど損なわれません。
if (param1 == null || param2 == null) {
logger.error("Failed to do stuff.");
logger.debug(
"param1: " + param1 + System.getProperty("line.separator")
+ "param2: " + param2
);
}
ロガー出力を少し変更しても問題ない場合は、次のように記述できます。
if (param1 == null || param2 == null) {
String message = "Failed to do stuff.";
if (logger.isDebugEnabled()) {
message += System.getProperty("line.separator")
+ "param1: " + param1 + System.getProperty("line.separator")
+ "param2: " + param2;
}
logger.error(message);
}
ログをきれいにしますが、コードは醜いです...
または、次のように書くこともできます。
if (param1 == null || param2 == null) {
synchronized (logger) {
logger.error("Failed to do stuff.");
logger.debug("param1: " + param1);
logger.debug("param2: " + param2);
}
}
何をお勧めしますか?その理由は何ですか?