Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
change
sglang
Commits
69b35793
Unverified
Commit
69b35793
authored
Sep 14, 2025
by
Chang Su
Committed by
GitHub
Sep 14, 2025
Browse files
[router] fix logger ordering git ctx (#10457)
parent
957482c8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
29 additions
and
61 deletions
+29
-61
sgl-router/src/middleware.rs
sgl-router/src/middleware.rs
+24
-57
sgl-router/src/server.rs
sgl-router/src/server.rs
+5
-4
No files found.
sgl-router/src/middleware.rs
View file @
69b35793
...
...
@@ -113,38 +113,14 @@ where
let
request_id
=
request_id
.unwrap_or_else
(||
generate_request_id
(
req
.uri
()
.path
()));
// Insert request ID into request extensions
// Insert request ID into request extensions
for other middleware/handlers to use
req
.extensions_mut
()
.insert
(
RequestId
(
request_id
.clone
()));
// Create a span with the request ID for this request
let
span
=
tracing
::
info_span!
(
"http_request"
,
method
=
%
req
.method
(),
uri
=
%
req
.uri
(),
version
=
?
req
.version
(),
request_id
=
%
request_id
);
// Log within the span
let
_
enter
=
span
.enter
();
tracing
::
info!
(
target
:
"sglang_router_rs::request"
,
"started processing request"
);
drop
(
_
enter
);
// Capture values we need in the async block
let
method
=
req
.method
()
.clone
();
let
uri
=
req
.uri
()
.clone
();
let
version
=
req
.version
();
// Call the inner service
let
future
=
self
.inner
.call
(
req
);
Box
::
pin
(
async
move
{
let
start_time
=
Instant
::
now
();
let
mut
response
=
future
.await
?
;
let
latency
=
start_time
.elapsed
();
// Add request ID to response headers
response
.headers_mut
()
.insert
(
...
...
@@ -153,36 +129,6 @@ where
.unwrap_or_else
(|
_
|
HeaderValue
::
from_static
(
"invalid-request-id"
)),
);
// Log the response with proper request ID in span
let
status
=
response
.status
();
let
span
=
tracing
::
info_span!
(
"http_request"
,
method
=
%
method
,
uri
=
%
uri
,
version
=
?
version
,
request_id
=
%
request_id
,
status
=
%
status
,
latency
=
?
latency
);
let
_
enter
=
span
.enter
();
if
status
.is_server_error
()
{
tracing
::
error!
(
target
:
"sglang_router_rs::response"
,
"request failed with server error"
);
}
else
if
status
.is_client_error
()
{
tracing
::
warn!
(
target
:
"sglang_router_rs::response"
,
"request failed with client error"
);
}
else
{
tracing
::
info!
(
target
:
"sglang_router_rs::response"
,
"finished processing request"
);
}
Ok
(
response
)
})
}
...
...
@@ -225,7 +171,11 @@ impl<B> OnRequest<B> for RequestLogger {
span
.record
(
"request_id"
,
request_id
.0
.as_str
());
}
// Don't log here - we already log in RequestIdService with the proper request_id
// Log the request start
info!
(
target
:
"sglang_router_rs::request"
,
"started processing request"
);
}
}
...
...
@@ -251,7 +201,24 @@ impl<B> OnResponse<B> for ResponseLogger {
span
.record
(
"status_code"
,
status
.as_u16
());
span
.record
(
"latency"
,
format!
(
"{:?}"
,
latency
));
// Don't log here - RequestIdService handles all logging with proper request IDs
// Log the response completion
let
_
enter
=
span
.enter
();
if
status
.is_server_error
()
{
error!
(
target
:
"sglang_router_rs::response"
,
"request failed with server error"
);
}
else
if
status
.is_client_error
()
{
warn!
(
target
:
"sglang_router_rs::response"
,
"request failed with client error"
);
}
else
{
info!
(
target
:
"sglang_router_rs::response"
,
"finished processing request"
);
}
}
}
...
...
sgl-router/src/server.rs
View file @
69b35793
...
...
@@ -525,11 +525,12 @@ pub fn build_app(
.layer
(
tower_http
::
limit
::
RequestBodyLimitLayer
::
new
(
max_payload_size
,
))
// Request ID layer - must be added AFTER logging layer in the code
// so it executes BEFORE logging layer at runtime (layers execute bottom-up)
.layer
(
crate
::
middleware
::
RequestIdLayer
::
new
(
request_id_headers
))
// Custom logging layer that can now see request IDs from extensions
// Logging layer - must be added BEFORE request ID layer in the code
// so it executes AFTER request ID layer at runtime (layers execute bottom-up)
// This way the TraceLayer can see the request ID that was added to extensions
.layer
(
crate
::
middleware
::
create_logging_layer
())
// Request ID layer - adds request ID to extensions first
.layer
(
crate
::
middleware
::
RequestIdLayer
::
new
(
request_id_headers
))
// CORS (should be outermost)
.layer
(
create_cors_layer
(
cors_allowed_origins
))
// Fallback
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment