You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:06:00