apache/seatunnel · warning
Logger level request to member {} failed
Error message
Logger level request to member {} failed What it means
LoggerLevelService.fanOut sends logger-level GET/SET/RESET requests to each cluster member over HTTP. If a member request throws, this warning is logged (with the throwable) and a per-node JSON entry with STATUS=FAILURE and the error message is added to the response, so the caller sees which node failed while other nodes still report.
Source
Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/rest/service/LoggerLevelService.java:189
NodeEngineUtil.sendOperationToMemberNode(
nodeEngine,
new GetNodeHttpPortOperation(),
member.getAddress())
.get();
memberId = member.getAddress().getHost() + ":" + httpPort;
String url =
"http://"
+ member.getAddress().getHost()
+ ":"
+ httpPort
+ httpConfig.getContextPath()
+ RestConstant.REST_URL_LOGGERS
+ (name == null ? "" : "/" + encode(name))
+ (level == null ? "" : "?" + LEVEL + "=" + encode(level.name()));
nodes.add(request(url, method, httpConfig));
reached++;
} catch (Throwable t) {
log.warn("Logger level request to member {} failed", memberId, t);
nodes.add(
new JsonObject()
.add(NODE, memberId)
.add(STATUS, FAILURE)
.add(ERROR, errorMessage(t)));
failed++;
}
}
String status = failed == 0 ? SUCCESS : (reached == 0 ? FAILURE : PARTIAL_FAILURE);
JsonObject response = new JsonObject().add(SCOPE, SCOPE_CLUSTER).add(STATUS, status);
if (name != null) {
response.add(NAME, name);
}
if (level != null) {
response.add(LEVEL, level.name());
}
return response.add(NODES, nodes);
}View on GitHub (pinned to cf67b549a7)
Solutions
- Inspect the per-node ERROR field in the returned JSON to see why that member failed.
- Verify the failing member is up and its REST port is reachable; restart or fix networking.
- Check basic-auth configuration consistency across nodes.
- Use a valid level enum supported by the target logging implementation; avoid mixed versions in the cluster.
Example fix
// before // POST /loggers/MyLogger?level=VERBOSE // after (valid level) // POST /loggers/MyLogger?level=DEBUG
Defensive patterns
Strategy: try-catch
Validate before calling
// before fan-out, validate level and member reachability
// if (!VALID_LEVELS.contains(level.name())) throw new IllegalArgumentException("bad level");
// if (!isNodeReachable(memberId)) { preMarkFailure(memberId); } Try / catch
try {
nodes.add(request(url, method, httpConfig));
reached++;
} catch (Throwable t) {
log.warn("Logger level request to member {} failed", memberId, t);
nodes.add(perNodeFailure(memberId, t)); // node entry with STATUS=FAILURE
} Prevention
- Only use valid logger level enums
- Keep cluster nodes on compatible versions
- Check member health before cluster-wide logger operations
When it happens
Trigger: Calling cluster loggers / clusterSetLevel / clusterResetLevel REST endpoints when a member is unreachable, its HTTP port is wrong, basic-auth fails, or the target logger name/level is rejected by that node's endpoint.
Common situations: One node down or restarting during the fan-out; per-node auth credentials mismatch; mixed-version cluster where the /loggers endpoint differs; invalid level name for that node's logging framework.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
- GET {} -> HTTP {}
- master not yet known
- Request body is empty.
- HTTP ${code} from ${url}: ${errorBody}
- SeaTunnel server is not available on this node.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e89cbfeda4079df7.
Report an issue: GitHub.