mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-25 18:54:30 +00:00
fix(_logging.py): add sensitive data filter to logging
Fixes https://github.com/BerriAI/litellm/issues/7603 Also addresses https://github.com/BerriAI/litellm/issues/9815#issuecomment-2806844725
This commit is contained in:
parent
f661dd7776
commit
d2ad3bbfc0
3 changed files with 162 additions and 1 deletions
99
tests/litellm/test_logging.py
Normal file
99
tests/litellm/test_logging.py
Normal file
|
@ -0,0 +1,99 @@
|
|||
import logging
|
||||
|
||||
import pytest
|
||||
|
||||
from litellm._logging import SensitiveDataFilter
|
||||
|
||||
|
||||
def test_sensitive_data_filter():
|
||||
# Create a test logger
|
||||
logger = logging.getLogger("test_logger")
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
# Create a filter
|
||||
sensitive_filter = SensitiveDataFilter()
|
||||
|
||||
# Test cases
|
||||
test_cases = [
|
||||
{
|
||||
"input": '{"vertex_credentials": {"project_id": "test-project", "location": "us-central1", "private_key": "test-private-key"}}',
|
||||
"expected": '{"vertex_credentials": {"project_id": "test-project", "location": "us-central1", "private_key": "REDACTED"}}',
|
||||
},
|
||||
{
|
||||
"input": '{"api_key": "sk-1234567890"}',
|
||||
"expected": '{"api_key": "REDACTED"}',
|
||||
},
|
||||
{
|
||||
"input": '{"openai_api_key": "sk-1234567890"}',
|
||||
"expected": '{"openai_api_key": "REDACTED"}',
|
||||
},
|
||||
{"input": '{"password": "secret123"}', "expected": '{"password": "REDACTED"}'},
|
||||
{"input": '{"token": "abc123"}', "expected": '{"token": "REDACTED"}'},
|
||||
{
|
||||
"input": '{"api_base": "https://api.example.com"}',
|
||||
"expected": '{"api_base": "REDACTED"}',
|
||||
},
|
||||
{
|
||||
"input": '{"non_sensitive": "value", "credentials": "secret"}',
|
||||
"expected": '{"non_sensitive": "value", "credentials": "REDACTED"}',
|
||||
},
|
||||
]
|
||||
|
||||
for test_case in test_cases:
|
||||
# Create a log record
|
||||
record = logging.LogRecord(
|
||||
name="test_logger",
|
||||
level=logging.INFO,
|
||||
pathname="test.py",
|
||||
lineno=1,
|
||||
msg=test_case["input"],
|
||||
args=(),
|
||||
exc_info=None,
|
||||
)
|
||||
|
||||
# Apply the filter
|
||||
sensitive_filter.filter(record)
|
||||
|
||||
# Verify the output
|
||||
assert (
|
||||
record.msg == test_case["expected"]
|
||||
), f"Failed for input: {test_case['input']}"
|
||||
|
||||
|
||||
def test_sensitive_data_filter_with_different_formats():
|
||||
# Create a test logger
|
||||
logger = logging.getLogger("test_logger")
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
# Create a filter
|
||||
sensitive_filter = SensitiveDataFilter()
|
||||
|
||||
# Test different formats
|
||||
test_cases = [
|
||||
{"input": "api_key=sk-1234567890", "expected": "api_key=REDACTED"},
|
||||
{
|
||||
"input": "'credentials': 'secret123'",
|
||||
"expected": "'credentials': 'REDACTED'",
|
||||
},
|
||||
{"input": "\"token\": 'abc123'", "expected": "\"token\": 'REDACTED'"},
|
||||
]
|
||||
|
||||
for test_case in test_cases:
|
||||
# Create a log record
|
||||
record = logging.LogRecord(
|
||||
name="test_logger",
|
||||
level=logging.INFO,
|
||||
pathname="test.py",
|
||||
lineno=1,
|
||||
msg=test_case["input"],
|
||||
args=(),
|
||||
exc_info=None,
|
||||
)
|
||||
|
||||
# Apply the filter
|
||||
sensitive_filter.filter(record)
|
||||
|
||||
# Verify the output
|
||||
assert (
|
||||
record.msg == test_case["expected"]
|
||||
), f"Failed for input: {test_case['input']}"
|
Loading…
Add table
Add a link
Reference in a new issue