私は現在、相互に通信している多くのアプリケーションを含む大規模なプロジェクトに取り組んでいます。
私と私のチームは、システム内のアプリケーションを管理および調整し、必要なバグ修正と変更要求を行います。システムは頻繁に使用されており、アプリケーションは大量のログを使用しています。
典型的な例:
メッセージクライアント
public void save(final Message message) {
logger.info("Trying to save message: {}", message);
boolean result = false;
try {
result = messageService.save(message);
} catch (final MessageStoreException e) {
logger.warn("Unable to save message {}", message, e);
throw e;
} catch (final Exception e) {
logger.error("Unknown error when trying to save message!", e);
}
if (!result) {
logger.warn("Could not save the message!");
}
}
メッセージ サービス
public boolean save(final Message message) throws MessageStoreException {
if (message == null) {
throw new IllegalArgumentException("message!");
}
final boolean result = messageStore.store(message);
if (result) {
logger.info("Stored: {}", message.getId());
} else {
logger.warn("Unable to store: {}", message.getId());
}
return result;
}
注:サンプル コードに最適なエラー処理がないことはわかっていますが、これは、私たちが管理している多くのアプリケーションでどのように見えるかです。
もちろん、これによりログファイルが非常に大きくなります。
ログファイルには注意が必要な予期しないエラーのみが含まれるように、運用環境でログレベルinfo
とログレベルをオフにして、レベルのみをオンにしたいと考えています。warn
error
他の開発者は、バグやエラーを探してログファイルを表示しているときに「アプリケーション フロー」に従う方法がわからないため、この考えを好みません。
私はこれらの議論を理解しており、コミュニティからの意見が必要だと感じています。
では、ここでのベストプラクティスは何ですか? 実稼働環境で情報/警告ログ レベルを使用する必要がありますか、それともエラー ログのみを使用する必要がありますか? それとも両方?
ありがとう!
更新:アプリケーションは複数のサーバーで実行され、現在、すべてをファイルに記録しています (通常、アプリケーションごとにRollingFileAppenderを使用して 1 つのログ ファイル)。データベースへのロギングを開始するのは大変な作業なので、これはオプションではありません。
結論: ロギングは完全に簡単ではありません。情報レベルと警告レベルをオフにすることはしません (かなり思い切ったアクションでした) 代わりに、@jgauffin が言うように、「不要な」ログ メッセージを出力するアプリケーションのビジネス ルールを調べて分析します。
ケースクローズ!皆様、貴重なご意見とアドバイスをありがとうございました。