mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-10 03:28:53 +00:00
[Bug fix] - Error creating standard logging object - can't register atexit after shutdownLitellm fixes standard logging payload (#13436)
* fix: _generate_cold_storage_object_key * _get_configured_cold_storage_custom_logger * test_e2e_generate_cold_storage_object_key_runtime_error_handled
This commit is contained in:
parent
4fdc866fcb
commit
3b65733af8
3 changed files with 64 additions and 7 deletions
|
|
@ -4106,7 +4106,16 @@ class StandardLoggingPayloadSetup:
|
|||
from litellm.proxy.spend_tracking.cold_storage_handler import ColdStorageHandler
|
||||
|
||||
# Only generate object key if cold storage is configured
|
||||
configured_cold_storage_logger = ColdStorageHandler._get_configured_cold_storage_custom_logger()
|
||||
try:
|
||||
configured_cold_storage_logger = (
|
||||
ColdStorageHandler._get_configured_cold_storage_custom_logger()
|
||||
)
|
||||
except Exception as e:
|
||||
verbose_logger.debug(
|
||||
f"Cold storage custom logger unavailable: {e}"
|
||||
)
|
||||
return None
|
||||
|
||||
if configured_cold_storage_logger is None:
|
||||
return None
|
||||
|
||||
|
|
|
|||
|
|
@ -64,10 +64,31 @@ class ColdStorageHandler:
|
|||
|
||||
@staticmethod
|
||||
def _get_configured_cold_storage_custom_logger() -> Optional[_custom_logger_compatible_callbacks_literal]:
|
||||
from litellm.proxy.proxy_server import general_settings
|
||||
cold_storage_custom_logger: Optional[str] = general_settings.get("cold_storage_custom_logger")
|
||||
if not cold_storage_custom_logger:
|
||||
verbose_proxy_logger.debug("No cold storage custom logger found in general settings")
|
||||
"""Return the configured cold storage custom logger.
|
||||
|
||||
During interpreter shutdown importing ``proxy_server`` can raise a
|
||||
``RuntimeError`` (e.g. "can't register atexit after shutdown").
|
||||
In these scenarios we gracefully return ``None`` instead of bubbling
|
||||
the exception up the call stack.
|
||||
"""
|
||||
|
||||
try:
|
||||
from litellm.proxy.proxy_server import general_settings
|
||||
except Exception as e:
|
||||
verbose_proxy_logger.debug(
|
||||
f"Unable to import proxy_server for cold storage logging: {e}"
|
||||
)
|
||||
return None
|
||||
|
||||
return cast(_custom_logger_compatible_callbacks_literal, cold_storage_custom_logger)
|
||||
|
||||
cold_storage_custom_logger: Optional[str] = general_settings.get(
|
||||
"cold_storage_custom_logger"
|
||||
)
|
||||
if not cold_storage_custom_logger:
|
||||
verbose_proxy_logger.debug(
|
||||
"No cold storage custom logger found in general settings"
|
||||
)
|
||||
return None
|
||||
|
||||
return cast(
|
||||
_custom_logger_compatible_callbacks_literal, cold_storage_custom_logger
|
||||
)
|
||||
|
|
@ -464,3 +464,30 @@ async def test_e2e_generate_cold_storage_object_key_not_configured():
|
|||
|
||||
# Verify the result is None when cold storage is not configured
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_e2e_generate_cold_storage_object_key_runtime_error_handled():
|
||||
"""Ensure runtime errors while loading cold storage logger are ignored."""
|
||||
from datetime import datetime, timezone
|
||||
from unittest.mock import patch
|
||||
|
||||
from litellm.litellm_core_utils.litellm_logging import StandardLoggingPayloadSetup
|
||||
|
||||
start_time = datetime(2025, 1, 15, 10, 30, 45, 123456, timezone.utc)
|
||||
response_id = "chatcmpl-test-runtime"
|
||||
team_alias = "team"
|
||||
|
||||
with patch(
|
||||
"litellm.proxy.spend_tracking.cold_storage_handler.ColdStorageHandler._get_configured_cold_storage_custom_logger",
|
||||
side_effect=RuntimeError("can't register atexit after shutdown"),
|
||||
):
|
||||
result = StandardLoggingPayloadSetup._generate_cold_storage_object_key(
|
||||
start_time=start_time,
|
||||
response_id=response_id,
|
||||
team_alias=team_alias,
|
||||
)
|
||||
|
||||
# When an exception occurs retrieving the cold storage logger, the
|
||||
# function should return None instead of raising.
|
||||
assert result is None
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue