如何避免AppDynamics记录合法的FileNotFoundException及404错误?
解决AppDynamics记录合法HTTP错误的问题
首先,根据你描述的情况,AppDynamics会自动将HTTP错误响应(如404)标记为事务快照错误,即使你的代码已经通过返回布尔值处理了这种情况。我们可以从代码层面结合AppDynamics API或者控制台配置来解决这个问题,下面是具体的方案:
方案1:代码层面手动标记合法错误为非异常
AppDynamics提供了Agent API,可以让你在代码中手动控制事务的错误状态。对于你预期的合法HTTP状态(比如404),可以调用API清除错误标记,避免被记录为错误。
修改后的代码示例
import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; public class Connection { public boolean connect(URL url, String requestType) { HttpURLConnection connection = null; try { URLConnection urlConnection = url.openConnection(); if (urlConnection instanceof HttpURLConnection) { connection = (HttpURLConnection) urlConnection; connection.setRequestMethod(requestType); connection.setRequestProperty("Authorization", getAuth()); } if (connection == null) { return false; } connection.connect(); int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { return true; } else if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) { // 告诉AppDynamics这个404是预期的,不要标记为错误 com.singularity.ee.agent.systemagent.api.ITransaction transaction = com.singularity.ee.agent.systemagent.api.AgentApi.getTransaction(); if (transaction != null) { transaction.clearError(); } return false; } // 其他非预期的HTTP错误,保留AppDynamics的错误记录 return false; } catch (IOException e) { // 区分异常类型,只忽略预期的404相关异常 if (e instanceof java.io.FileNotFoundException) { com.singularity.ee.agent.systemagent.api.ITransaction transaction = com.singularity.ee.agent.systemagent.api.AgentApi.getTransaction(); if (transaction != null) { transaction.clearError(); } } return false; } finally { // 确保关闭连接,避免资源泄漏 if (connection != null) { connection.disconnect(); } } } // 假设这是你的授权方法 private String getAuth() { return "your-auth-token"; } }
关键改动说明
- 提前获取
responseCode,单独处理预期的404状态,调用transaction.clearError()清除AppDynamics的错误标记 - 在
catch块中,针对404触发的FileNotFoundException同样执行错误清除操作 - 添加
finally块关闭连接,避免资源泄漏
方案2:在AppDynamics控制台配置忽略规则
如果你不想修改代码,可以直接在AppDynamics控制台中配置规则,忽略特定的HTTP状态码或异常:
- 进入你的应用仪表板,找到配置 > 错误检测规则
- 添加新规则:选择“HTTP状态码”作为条件,设置忽略404(或其他你认为合法的状态码)
- 或者针对特定方法(比如
Connection.connect)忽略FileNotFoundException
注意事项
- 使用Agent API时,需要确保项目中引入了AppDynamics的Agent依赖包(通常由运维团队提供)
- 如果你的场景中有多个合法的HTTP状态码(如400、403),可以在代码中扩展
else if的条件,统一处理
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

