1
サーバーエラーが発生したとき(たとえば、除算、メモリ不足例外など)に通知を受けたいWebサービスを開発しました。私は、カスタム内の各リクエストに対してこのエラーを処理して送信するのがよい練習であるかどうか疑問に思っていますErrorHandler
?Play Frameworkのサーバーエラーで電子メールを送信する
package controllers;
import play.*;
import play.api.OptionalSourceMapper;
import play.api.UsefulException;
import play.api.routing.Router;
import play.http.DefaultHttpErrorHandler;
import play.mvc.Http.*;
import play.mvc.*;
import javax.inject.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
@Singleton
public class ErrorHandler extends DefaultHttpErrorHandler {
@Inject
public ErrorHandler(Configuration configuration, Environment environment, OptionalSourceMapper sourceMapper, Provider<Router> routes) {
super(configuration, environment, sourceMapper, routes);
}
// Invoked in prod mode when a server error occurs.
protected CompletionStage<Result> onProdServerError(RequestHeader request, UsefulException exception) {
return CompletableFuture.completedFuture(Results.internalServerError("A server error occurred (prod): " + exception.getMessage())
// Send email
);
}
protected CompletionStage<Result> onDevServerError(RequestHeader request, UsefulException exception) {
return CompletableFuture.completedFuture(
Results.internalServerError("A server error occurred (dev): " + exception.getMessage())
);
}
}
私は同じ考えをしていました。私はちょうどログバックを使用し、特定のログレベルのメッセージ(この場合はエラーメッセージ)でトリガされるsmtpアペンダを書きます。ここで私が見ている問題は、クライアントとサーバーのエラーを区別することができないことです(たとえば、無効なjsonの場合はエラーが記録されますが、電子メールを送信したくないということです)。私はPlayで致命的なエラーが記録されてもそれができますが、私が間違っていないとサポートされていないのですか? – martez
logg内の特定のタグを使用してログステートメントを相違させる – pamu
これは、各コントローラに対して、キャッチされない例外をチェックしてログに記録する必要があるということですか?もう一つのオプションは、デフォルトのキャッチされていない例外ハンドラを設定することですが、私はどこにそれを置くための参照を見つけることができませんでした。最初の記事では、致命的なエラーはonProdServerErrorによって処理されないと述べました。あれは正しいですか? – martez