mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2026-04-23 00:17:25 +08:00
[Feature] implement log channel separation and request log level system (#7190)
* feat: implement log channel separation and request log level system * fix: log system improvements based on review * add request_id to error logs, use RequestLogLevel enum, and unify logger implementation from utils to logger module
This commit is contained in:
@@ -47,9 +47,13 @@ sys.modules["fastdeploy.engine.request"] = Mock()
|
||||
sys.modules["fastdeploy.scheduler"] = Mock()
|
||||
sys.modules["fastdeploy.scheduler.local_scheduler"] = Mock()
|
||||
sys.modules["fastdeploy.scheduler.data"] = Mock()
|
||||
sys.modules["fastdeploy.logger"] = Mock()
|
||||
sys.modules["fastdeploy.logger.request_logger"] = Mock()
|
||||
|
||||
# Mock the get_logger function
|
||||
sys.modules["fastdeploy.utils"].get_logger = Mock(return_value=mock_logger)
|
||||
# Mock the log_request function
|
||||
sys.modules["fastdeploy.logger.request_logger"].log_request = Mock()
|
||||
|
||||
|
||||
# Mock the Request, RequestOutput, and ScheduledResponse classes
|
||||
@@ -240,8 +244,9 @@ class TestDPLocalScheduler(unittest.TestCase):
|
||||
|
||||
def test_put_results_with_finished_requests(self):
|
||||
"""Test putting results with finished requests."""
|
||||
# Reset mock logger
|
||||
mock_logger.reset_mock()
|
||||
# Get the mock log_request function
|
||||
mock_log_request = sys.modules["fastdeploy.logger.request_logger"].log_request
|
||||
mock_log_request.reset_mock()
|
||||
|
||||
# Create mock request outputs
|
||||
results = [
|
||||
@@ -254,13 +259,12 @@ class TestDPLocalScheduler(unittest.TestCase):
|
||||
with patch.object(self.scheduler, "responses_not_empty"):
|
||||
self.scheduler.put_results(results)
|
||||
|
||||
# Check that finished requests were logged - the logger should have been called
|
||||
self.assertTrue(mock_logger.info.called)
|
||||
# Check that finished requests were logged via log_request
|
||||
self.assertTrue(mock_log_request.called)
|
||||
# Get the actual call arguments to verify the message format
|
||||
call_args = mock_logger.info.call_args[0][0]
|
||||
self.assertIn("finished responses", call_args)
|
||||
self.assertIn("req1", call_args)
|
||||
self.assertIn("req3", call_args)
|
||||
call_kwargs = mock_log_request.call_args[1]
|
||||
self.assertIn("finished responses", call_kwargs.get("message", ""))
|
||||
self.assertIn("req1", str(call_kwargs.get("request_ids", [])))
|
||||
|
||||
def test_put_results_with_new_responses(self):
|
||||
"""Test putting results with new responses."""
|
||||
|
||||
@@ -17,10 +17,11 @@ import unittest
|
||||
from unittest.mock import Mock, patch # noqa: F401
|
||||
|
||||
from fastdeploy.engine.request import Request, RequestMetrics, RequestOutput
|
||||
from fastdeploy.logger.request_logger import RequestLogLevel
|
||||
|
||||
# Real FastDeploy imports
|
||||
from fastdeploy.scheduler.local_scheduler import LocalScheduler
|
||||
from fastdeploy.utils import envs, scheduler_logger
|
||||
from fastdeploy.utils import envs
|
||||
|
||||
|
||||
class TestLocalScheduler(unittest.TestCase):
|
||||
@@ -221,9 +222,9 @@ class TestLocalScheduler(unittest.TestCase):
|
||||
|
||||
def test_reset_logs_message(self):
|
||||
"""Test that reset logs appropriate message."""
|
||||
with patch.object(scheduler_logger, "info") as mock_info:
|
||||
with patch("fastdeploy.scheduler.local_scheduler.log_request") as mock_log:
|
||||
self.scheduler.reset()
|
||||
mock_info.assert_called_once_with("Scheduler has been reset")
|
||||
mock_log.assert_called_once_with(RequestLogLevel.LIFECYCLE, message="Scheduler has been reset")
|
||||
|
||||
def test_put_requests_duplicate_handling(self):
|
||||
"""Test handling of duplicate request IDs."""
|
||||
@@ -449,12 +450,14 @@ class TestLocalScheduler(unittest.TestCase):
|
||||
# Add request first
|
||||
self.scheduler.put_requests([self.mock_request_1])
|
||||
|
||||
with patch.object(scheduler_logger, "info") as mock_info:
|
||||
with patch("fastdeploy.scheduler.local_scheduler.log_request") as mock_log_request:
|
||||
mock_output = self._create_test_request_output("req_1", finished=True)
|
||||
self.scheduler.put_results([mock_output])
|
||||
|
||||
# Should log finished response
|
||||
self._assert_log_contains(mock_info, "finished responses")
|
||||
# Should log finished response via log_request
|
||||
mock_log_request.assert_called_once()
|
||||
call_kwargs = mock_log_request.call_args[1]
|
||||
self.assertIn("finished responses", call_kwargs.get("message", ""))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user