main
1import os
2import logging
3from typing_extensions import override
4
5from ._utils import is_dict
6
7logger: logging.Logger = logging.getLogger("openai")
8httpx_logger: logging.Logger = logging.getLogger("httpx")
9
10
11SENSITIVE_HEADERS = {"api-key", "authorization"}
12
13
14def _basic_config() -> None:
15 # e.g. [2023-10-05 14:12:26 - openai._base_client:818 - DEBUG] HTTP Request: POST http://127.0.0.1:4010/foo/bar "200 OK"
16 logging.basicConfig(
17 format="[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
18 datefmt="%Y-%m-%d %H:%M:%S",
19 )
20
21
22def setup_logging() -> None:
23 env = os.environ.get("OPENAI_LOG")
24 if env == "debug":
25 _basic_config()
26 logger.setLevel(logging.DEBUG)
27 httpx_logger.setLevel(logging.DEBUG)
28 elif env == "info":
29 _basic_config()
30 logger.setLevel(logging.INFO)
31 httpx_logger.setLevel(logging.INFO)
32
33
34class SensitiveHeadersFilter(logging.Filter):
35 @override
36 def filter(self, record: logging.LogRecord) -> bool:
37 if is_dict(record.args) and "headers" in record.args and is_dict(record.args["headers"]):
38 headers = record.args["headers"] = {**record.args["headers"]}
39 for header in headers:
40 if str(header).lower() in SENSITIVE_HEADERS:
41 headers[header] = "<redacted>"
42 return True