0

我正在 Heroku 上运行 Play Framework 1.4 应用程序。我的目标是捕获生产应用程序中的任何 Java 异常,并将其报告给Stackdriver Error Reporting以进行自动异常监控和警报。

4

1 回答 1

0

Google Cloud Console中,根据需要创建一个新项目,然后启用 Stackdriver Error Reporting API获取 API 密钥

然后目标是使用简单的 Stackdriver Error Reporting报告 API 端点:使用 HTTP POST 请求和 API 密钥发送错误堆栈跟踪。

检测 Play Framework 应用程序以捕获所有异常,将它们格式化为预期的结构并将它们 POST 到 Stackdriver(确保您至少使用 JDK v1.7)。

这是您需要添加到应用程序控制器的代码:

public class Application extends Controller {

@Catch(value={Exception.class})
public static void onException(Exception ex) {
    StringWriter exceptionWriter = new StringWriter();
    ex.printStackTrace(new PrintWriter(exceptionWriter));

    Map<String, Object> payload = new HashMap<String, Object>();
    payload.put("message", exceptionWriter.toString());
    Map<String,String> serviceContextData = new HashMap<String, String>();
    serviceContextData.put("service", "randomgift");
    payload.put("serviceContext", serviceContextData);
    Gson gson = new Gson();
    String payloadStr = gson.toJson(payload); 

    Map<String, String> headers = new HashMap<String,String>();
    headers.put("Content-Type", "application/json");

    // Report to Stackdriver Error Reporting:
    String apikey = "<your-api-key>";
    String projectName = "<your-project-id>";
    WS.url("https://clouderrorreporting.googleapis.com/v1beta1/projects/" + projectName + "/events:report?key=" + apikey)
      .headers(headers)
      .body(payloadStr)
      .post();

    Logger.info("Error reported");
}

}

于 2016-11-24T13:35:11.060 回答