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
82f021e2
Unverified
Commit
82f021e2
authored
Jul 03, 2025
by
Zilin Zhu
Committed by
GitHub
Jul 02, 2025
Browse files
[router] add --log-level to sgl-router (#6512)
parent
0626f678
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
36 additions
and
27 deletions
+36
-27
sgl-router/README.md
sgl-router/README.md
+1
-1
sgl-router/py_src/sglang_router/launch_router.py
sgl-router/py_src/sglang_router/launch_router.py
+10
-8
sgl-router/py_src/sglang_router/router.py
sgl-router/py_src/sglang_router/router.py
+3
-3
sgl-router/py_test/test_launch_router.py
sgl-router/py_test/test_launch_router.py
+1
-0
sgl-router/src/config/types.rs
sgl-router/src/config/types.rs
+3
-3
sgl-router/src/lib.rs
sgl-router/src/lib.rs
+6
-6
sgl-router/src/server.rs
sgl-router/src/server.rs
+12
-6
No files found.
sgl-router/README.md
View file @
82f021e2
...
@@ -79,7 +79,7 @@ router = Router(
...
@@ -79,7 +79,7 @@ router = Router(
)
)
```
```
Use the
`--
verbose
`
flag with the CLI
for more detailed logs
.
Use the
`--
log-level
`
flag with the CLI
to set
[
log level
](
https://docs.sglang.ai/backend/server_arguments.html#logging
)
.
### Metrics
### Metrics
...
...
sgl-router/py_src/sglang_router/launch_router.py
View file @
82f021e2
...
@@ -48,8 +48,8 @@ class RouterArgs:
...
@@ -48,8 +48,8 @@ class RouterArgs:
eviction_interval
:
int
=
60
eviction_interval
:
int
=
60
max_tree_size
:
int
=
2
**
24
max_tree_size
:
int
=
2
**
24
max_payload_size
:
int
=
256
*
1024
*
1024
# 256MB default for large batches
max_payload_size
:
int
=
256
*
1024
*
1024
# 256MB default for large batches
verbose
:
bool
=
False
log_dir
:
Optional
[
str
]
=
None
log_dir
:
Optional
[
str
]
=
None
log_level
:
Optional
[
str
]
=
None
# Service discovery configuration
# Service discovery configuration
service_discovery
:
bool
=
False
service_discovery
:
bool
=
False
selector
:
Dict
[
str
,
str
]
=
dataclasses
.
field
(
default_factory
=
dict
)
selector
:
Dict
[
str
,
str
]
=
dataclasses
.
field
(
default_factory
=
dict
)
...
@@ -178,17 +178,19 @@ class RouterArgs:
...
@@ -178,17 +178,19 @@ class RouterArgs:
default
=
RouterArgs
.
max_payload_size
,
default
=
RouterArgs
.
max_payload_size
,
help
=
"Maximum payload size in bytes"
,
help
=
"Maximum payload size in bytes"
,
)
)
parser
.
add_argument
(
f
"--
{
prefix
}
verbose"
,
action
=
"store_true"
,
help
=
"Enable verbose logging"
,
)
parser
.
add_argument
(
parser
.
add_argument
(
f
"--
{
prefix
}
log-dir"
,
f
"--
{
prefix
}
log-dir"
,
type
=
str
,
type
=
str
,
default
=
None
,
default
=
None
,
help
=
"Directory to store log files. If not specified, logs are only output to console."
,
help
=
"Directory to store log files. If not specified, logs are only output to console."
,
)
)
parser
.
add_argument
(
f
"--
{
prefix
}
log-level"
,
type
=
str
,
default
=
"info"
,
choices
=
[
"debug"
,
"info"
,
"warning"
,
"error"
,
"critical"
],
help
=
"Set the logging level. If not specified, defaults to INFO."
,
)
parser
.
add_argument
(
parser
.
add_argument
(
f
"--
{
prefix
}
service-discovery"
,
f
"--
{
prefix
}
service-discovery"
,
action
=
"store_true"
,
action
=
"store_true"
,
...
@@ -275,8 +277,8 @@ class RouterArgs:
...
@@ -275,8 +277,8 @@ class RouterArgs:
eviction_interval
=
getattr
(
args
,
f
"
{
prefix
}
eviction_interval"
),
eviction_interval
=
getattr
(
args
,
f
"
{
prefix
}
eviction_interval"
),
max_tree_size
=
getattr
(
args
,
f
"
{
prefix
}
max_tree_size"
),
max_tree_size
=
getattr
(
args
,
f
"
{
prefix
}
max_tree_size"
),
max_payload_size
=
getattr
(
args
,
f
"
{
prefix
}
max_payload_size"
),
max_payload_size
=
getattr
(
args
,
f
"
{
prefix
}
max_payload_size"
),
verbose
=
getattr
(
args
,
f
"
{
prefix
}
verbose"
,
False
),
log_dir
=
getattr
(
args
,
f
"
{
prefix
}
log_dir"
,
None
),
log_dir
=
getattr
(
args
,
f
"
{
prefix
}
log_dir"
,
None
),
log_level
=
getattr
(
args
,
f
"
{
prefix
}
log_level"
,
None
),
service_discovery
=
getattr
(
args
,
f
"
{
prefix
}
service_discovery"
,
False
),
service_discovery
=
getattr
(
args
,
f
"
{
prefix
}
service_discovery"
,
False
),
selector
=
cls
.
_parse_selector
(
getattr
(
args
,
f
"
{
prefix
}
selector"
,
None
)),
selector
=
cls
.
_parse_selector
(
getattr
(
args
,
f
"
{
prefix
}
selector"
,
None
)),
service_discovery_port
=
getattr
(
args
,
f
"
{
prefix
}
service_discovery_port"
),
service_discovery_port
=
getattr
(
args
,
f
"
{
prefix
}
service_discovery_port"
),
...
@@ -404,8 +406,8 @@ def launch_router(args: argparse.Namespace) -> Optional[Router]:
...
@@ -404,8 +406,8 @@ def launch_router(args: argparse.Namespace) -> Optional[Router]:
eviction_interval_secs
=
router_args
.
eviction_interval
,
eviction_interval_secs
=
router_args
.
eviction_interval
,
max_tree_size
=
router_args
.
max_tree_size
,
max_tree_size
=
router_args
.
max_tree_size
,
max_payload_size
=
router_args
.
max_payload_size
,
max_payload_size
=
router_args
.
max_payload_size
,
verbose
=
router_args
.
verbose
,
log_dir
=
router_args
.
log_dir
,
log_dir
=
router_args
.
log_dir
,
log_level
=
router_args
.
log_level
,
service_discovery
=
router_args
.
service_discovery
,
service_discovery
=
router_args
.
service_discovery
,
selector
=
router_args
.
selector
,
selector
=
router_args
.
selector
,
service_discovery_port
=
router_args
.
service_discovery_port
,
service_discovery_port
=
router_args
.
service_discovery_port
,
...
...
sgl-router/py_src/sglang_router/router.py
View file @
82f021e2
...
@@ -31,8 +31,8 @@ class Router:
...
@@ -31,8 +31,8 @@ class Router:
routing. Default: 60
routing. Default: 60
max_payload_size: Maximum payload size in bytes. Default: 256MB
max_payload_size: Maximum payload size in bytes. Default: 256MB
max_tree_size: Maximum size of the approximation tree for cache-aware routing. Default: 2^24
max_tree_size: Maximum size of the approximation tree for cache-aware routing. Default: 2^24
verbose: Enable verbose logging. Default: False
log_dir: Directory to store log files. If None, logs are only output to console. Default: None
log_dir: Directory to store log files. If None, logs are only output to console. Default: None
log_level: Logging level. Options: 'debug', 'info', 'warning', 'error', 'critical'.
service_discovery: Enable Kubernetes service discovery. When enabled, the router will
service_discovery: Enable Kubernetes service discovery. When enabled, the router will
automatically discover worker pods based on the selector. Default: False
automatically discover worker pods based on the selector. Default: False
selector: Dictionary mapping of label keys to values for Kubernetes pod selection.
selector: Dictionary mapping of label keys to values for Kubernetes pod selection.
...
@@ -66,8 +66,8 @@ class Router:
...
@@ -66,8 +66,8 @@ class Router:
eviction_interval_secs
:
int
=
60
,
eviction_interval_secs
:
int
=
60
,
max_tree_size
:
int
=
2
**
24
,
max_tree_size
:
int
=
2
**
24
,
max_payload_size
:
int
=
256
*
1024
*
1024
,
# 256MB
max_payload_size
:
int
=
256
*
1024
*
1024
,
# 256MB
verbose
:
bool
=
False
,
log_dir
:
Optional
[
str
]
=
None
,
log_dir
:
Optional
[
str
]
=
None
,
log_level
:
Optional
[
str
]
=
None
,
service_discovery
:
bool
=
False
,
service_discovery
:
bool
=
False
,
selector
:
Dict
[
str
,
str
]
=
None
,
selector
:
Dict
[
str
,
str
]
=
None
,
service_discovery_port
:
int
=
80
,
service_discovery_port
:
int
=
80
,
...
@@ -100,8 +100,8 @@ class Router:
...
@@ -100,8 +100,8 @@ class Router:
eviction_interval_secs
=
eviction_interval_secs
,
eviction_interval_secs
=
eviction_interval_secs
,
max_tree_size
=
max_tree_size
,
max_tree_size
=
max_tree_size
,
max_payload_size
=
max_payload_size
,
max_payload_size
=
max_payload_size
,
verbose
=
verbose
,
log_dir
=
log_dir
,
log_dir
=
log_dir
,
log_level
=
log_level
,
service_discovery
=
service_discovery
,
service_discovery
=
service_discovery
,
selector
=
selector
,
selector
=
selector
,
service_discovery_port
=
service_discovery_port
,
service_discovery_port
=
service_discovery_port
,
...
...
sgl-router/py_test/test_launch_router.py
View file @
82f021e2
...
@@ -38,6 +38,7 @@ class TestLaunchRouter(unittest.TestCase):
...
@@ -38,6 +38,7 @@ class TestLaunchRouter(unittest.TestCase):
max_payload_size
=
256
*
1024
*
1024
,
# 256MB
max_payload_size
=
256
*
1024
*
1024
,
# 256MB
verbose
=
False
,
verbose
=
False
,
log_dir
=
None
,
log_dir
=
None
,
log_level
=
None
,
service_discovery
=
False
,
service_discovery
=
False
,
selector
=
None
,
selector
=
None
,
service_discovery_port
=
80
,
service_discovery_port
=
80
,
...
...
sgl-router/src/config/types.rs
View file @
82f021e2
...
@@ -27,8 +27,8 @@ pub struct RouterConfig {
...
@@ -27,8 +27,8 @@ pub struct RouterConfig {
pub
metrics
:
Option
<
MetricsConfig
>
,
pub
metrics
:
Option
<
MetricsConfig
>
,
/// Log directory (None = stdout only)
/// Log directory (None = stdout only)
pub
log_dir
:
Option
<
String
>
,
pub
log_dir
:
Option
<
String
>
,
///
Verbose logging
///
Log level (None = info)
pub
verbose
:
bool
,
pub
log_level
:
Option
<
String
>
,
}
}
/// Routing mode configuration
/// Routing mode configuration
...
@@ -177,7 +177,7 @@ impl Default for RouterConfig {
...
@@ -177,7 +177,7 @@ impl Default for RouterConfig {
discovery
:
None
,
discovery
:
None
,
metrics
:
None
,
metrics
:
None
,
log_dir
:
None
,
log_dir
:
None
,
verbose
:
fals
e
,
log_level
:
Non
e
,
}
}
}
}
}
}
...
...
sgl-router/src/lib.rs
View file @
82f021e2
...
@@ -37,8 +37,8 @@ struct Router {
...
@@ -37,8 +37,8 @@ struct Router {
eviction_interval_secs
:
u64
,
eviction_interval_secs
:
u64
,
max_tree_size
:
usize
,
max_tree_size
:
usize
,
max_payload_size
:
usize
,
max_payload_size
:
usize
,
verbose
:
bool
,
log_dir
:
Option
<
String
>
,
log_dir
:
Option
<
String
>
,
log_level
:
Option
<
String
>
,
service_discovery
:
bool
,
service_discovery
:
bool
,
selector
:
HashMap
<
String
,
String
>
,
selector
:
HashMap
<
String
,
String
>
,
service_discovery_port
:
u16
,
service_discovery_port
:
u16
,
...
@@ -129,7 +129,7 @@ impl Router {
...
@@ -129,7 +129,7 @@ impl Router {
discovery
,
discovery
,
metrics
,
metrics
,
log_dir
:
self
.log_dir
.clone
(),
log_dir
:
self
.log_dir
.clone
(),
verbose
:
self
.verbose
,
log_level
:
self
.log_level
.clone
()
,
})
})
}
}
}
}
...
@@ -150,8 +150,8 @@ impl Router {
...
@@ -150,8 +150,8 @@ impl Router {
eviction_interval_secs
=
60
,
eviction_interval_secs
=
60
,
max_tree_size
=
2u
size
.
pow(
24
),
max_tree_size
=
2u
size
.
pow(
24
),
max_payload_size
=
256
*
1024
*
1024
,
// 256MB default for large batches
max_payload_size
=
256
*
1024
*
1024
,
// 256MB default for large batches
verbose
=
false
,
log_dir
=
None,
log_dir
=
None,
log_level
=
None,
service_discovery
=
false
,
service_discovery
=
false
,
selector
=
HashMap::new(),
selector
=
HashMap::new(),
service_discovery_port
=
80
,
service_discovery_port
=
80
,
...
@@ -179,8 +179,8 @@ impl Router {
...
@@ -179,8 +179,8 @@ impl Router {
eviction_interval_secs
:
u64
,
eviction_interval_secs
:
u64
,
max_tree_size
:
usize
,
max_tree_size
:
usize
,
max_payload_size
:
usize
,
max_payload_size
:
usize
,
verbose
:
bool
,
log_dir
:
Option
<
String
>
,
log_dir
:
Option
<
String
>
,
log_level
:
Option
<
String
>
,
service_discovery
:
bool
,
service_discovery
:
bool
,
selector
:
HashMap
<
String
,
String
>
,
selector
:
HashMap
<
String
,
String
>
,
service_discovery_port
:
u16
,
service_discovery_port
:
u16
,
...
@@ -208,8 +208,8 @@ impl Router {
...
@@ -208,8 +208,8 @@ impl Router {
eviction_interval_secs
,
eviction_interval_secs
,
max_tree_size
,
max_tree_size
,
max_payload_size
,
max_payload_size
,
verbose
,
log_dir
,
log_dir
,
log_level
,
service_discovery
,
service_discovery
,
selector
,
selector
,
service_discovery_port
,
service_discovery_port
,
...
@@ -283,9 +283,9 @@ impl Router {
...
@@ -283,9 +283,9 @@ impl Router {
port
:
self
.port
,
port
:
self
.port
,
worker_urls
:
self
.worker_urls
.clone
(),
worker_urls
:
self
.worker_urls
.clone
(),
policy_config
,
policy_config
,
verbose
:
self
.verbose
,
max_payload_size
:
self
.max_payload_size
,
max_payload_size
:
self
.max_payload_size
,
log_dir
:
self
.log_dir
.clone
(),
log_dir
:
self
.log_dir
.clone
(),
log_level
:
self
.log_level
.clone
(),
service_discovery_config
,
service_discovery_config
,
prometheus_config
,
prometheus_config
,
request_timeout_secs
:
self
.request_timeout_secs
,
request_timeout_secs
:
self
.request_timeout_secs
,
...
...
sgl-router/src/server.rs
View file @
82f021e2
...
@@ -278,9 +278,9 @@ pub struct ServerConfig {
...
@@ -278,9 +278,9 @@ pub struct ServerConfig {
pub
port
:
u16
,
pub
port
:
u16
,
pub
worker_urls
:
Vec
<
String
>
,
pub
worker_urls
:
Vec
<
String
>
,
pub
policy_config
:
PolicyConfig
,
pub
policy_config
:
PolicyConfig
,
pub
verbose
:
bool
,
pub
max_payload_size
:
usize
,
pub
max_payload_size
:
usize
,
pub
log_dir
:
Option
<
String
>
,
pub
log_dir
:
Option
<
String
>
,
pub
log_level
:
Option
<
String
>
,
pub
service_discovery_config
:
Option
<
ServiceDiscoveryConfig
>
,
pub
service_discovery_config
:
Option
<
ServiceDiscoveryConfig
>
,
pub
prometheus_config
:
Option
<
PrometheusConfig
>
,
pub
prometheus_config
:
Option
<
PrometheusConfig
>
,
pub
request_timeout_secs
:
u64
,
pub
request_timeout_secs
:
u64
,
...
@@ -292,11 +292,17 @@ pub async fn startup(config: ServerConfig) -> std::io::Result<()> {
...
@@ -292,11 +292,17 @@ pub async fn startup(config: ServerConfig) -> std::io::Result<()> {
let
_
log_guard
=
if
!
LOGGING_INITIALIZED
.swap
(
true
,
Ordering
::
SeqCst
)
{
let
_
log_guard
=
if
!
LOGGING_INITIALIZED
.swap
(
true
,
Ordering
::
SeqCst
)
{
Some
(
logging
::
init_logging
(
LoggingConfig
{
Some
(
logging
::
init_logging
(
LoggingConfig
{
level
:
if
config
.verbose
{
level
:
config
Level
::
DEBUG
.log_level
}
else
{
.as_deref
()
Level
::
INFO
.and_then
(|
s
|
match
s
.to_uppercase
()
.parse
::
<
Level
>
()
{
},
Ok
(
l
)
=>
Some
(
l
),
Err
(
_
)
=>
{
warn!
(
"Invalid log level string: '{}'. Defaulting to INFO."
,
s
);
None
}
})
.unwrap_or
(
Level
::
INFO
),
json_format
:
false
,
json_format
:
false
,
log_dir
:
config
.log_dir
.clone
(),
log_dir
:
config
.log_dir
.clone
(),
colorize
:
true
,
colorize
:
true
,
...
...
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