diff --git a/g4f/Provider/you/har_file.py b/g4f/Provider/you/har_file.py index 71d741fde33..40bf388267d 100644 --- a/g4f/Provider/you/har_file.py +++ b/g4f/Provider/you/har_file.py @@ -11,7 +11,7 @@ from ...errors import MissingRequirementsError from ... import debug -logging.basicConfig(level=logging.ERROR) +logger = logging.getLogger(__name__) class NoValidHarFileError(Exception): ... @@ -81,14 +81,14 @@ async def get_telemetry_ids(proxy: str = None) -> list: return [await create_telemetry_id(proxy)] except NoValidHarFileError as e: if debug.logging: - logging.error(e) + logger.error(e) try: from nodriver import start except ImportError: raise MissingRequirementsError('Add .har file from you.com or install "nodriver" package | pip install -U nodriver') if debug.logging: - logging.error('Getting telemetry_id for you.com with nodriver') + logger.error('Getting telemetry_id for you.com with nodriver') browser = page = None try: @@ -112,4 +112,4 @@ async def get_telemetry_id(): await browser.stop() except Exception as e: if debug.logging: - logging.error(e) + logger.error(e) diff --git a/g4f/__init__.py b/g4f/__init__.py index 017eb2e6aa5..b2125a32bc6 100644 --- a/g4f/__init__.py +++ b/g4f/__init__.py @@ -1,6 +1,7 @@ from __future__ import annotations import os +import logging from . import debug, version from .models import Model @@ -11,6 +12,12 @@ from .providers.base_provider import AsyncGeneratorProvider from .client.service import get_model_and_provider, get_last_provider +logger = logging.getLogger(__name__) +log_handler = logging.StreamHandler() +log_handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT)) +logger.addHandler(log_handler) +logger.setLevel(logging.ERROR) + class ChatCompletion: @staticmethod def create(model : Union[Model, str], @@ -145,4 +152,4 @@ def create(model : Union[Model, str], result = provider.create_completion(model, [{"role": "user", "content": prompt}], stream, **kwargs) - return result if stream else ''.join(result) \ No newline at end of file + return result if stream else ''.join(result) diff --git a/g4f/api/__init__.py b/g4f/api/__init__.py index da35319a0a1..00a4d568978 100644 --- a/g4f/api/__init__.py +++ b/g4f/api/__init__.py @@ -21,6 +21,8 @@ from g4f.typing import Messages from g4f.cookies import read_cookie_files +logger = logging.getLogger(__name__) + def create_app(): app = FastAPI() api = Api(app) @@ -174,13 +176,13 @@ async def streaming(): except GeneratorExit: pass except Exception as e: - logging.exception(e) + logger.exception(e) yield f'data: {format_exception(e, config)}\n\n' yield "data: [DONE]\n\n" return StreamingResponse(streaming(), media_type="text/event-stream") except Exception as e: - logging.exception(e) + logger.exception(e) return Response(content=format_exception(e, config), status_code=500, media_type="application/json") @self.app.post("/v1/completions") @@ -203,7 +205,7 @@ async def images_generate(config: ImagesGenerateForm, request: Request = None, p ) return JSONResponse(response.to_json()) except Exception as e: - logging.exception(e) + logger.exception(e) return Response(content=format_exception(e, config), status_code=500, media_type="application/json") def format_exception(e: Exception, config: ChatCompletionsForm) -> str: diff --git a/g4f/api/_logging.py b/g4f/api/_logging.py index e91dff76f9f..884d75295fe 100644 --- a/g4f/api/_logging.py +++ b/g4f/api/_logging.py @@ -1,6 +1,6 @@ import sys,logging -from loguru import logger +#from loguru import logger def __exception_handle(e_type, e_value, e_traceback): if issubclass(e_type, KeyboardInterrupt): @@ -9,24 +9,24 @@ def __exception_handle(e_type, e_value, e_traceback): sys.__excepthook__(e_type, e_value, e_traceback) -class __InterceptHandler(logging.Handler): - def emit(self, record): - try: - level = logger.level(record.levelname).name - except ValueError: - level = record.levelno - - frame, depth = logging.currentframe(), 2 - while frame.f_code.co_filename == logging.__file__: - frame = frame.f_back - depth += 1 - - logger.opt(depth=depth, exception=record.exc_info).log( - level, record.getMessage() - ) +#class __InterceptHandler(logging.Handler): +# def emit(self, record): +# try: +# level = logger.level(record.levelname).name +# except ValueError: +# level = record.levelno +# +# frame, depth = logging.currentframe(), 2 +# while frame.f_code.co_filename == logging.__file__: +# frame = frame.f_back +# depth += 1 + +# logger.opt(depth=depth, exception=record.exc_info).log( +# level, record.getMessage() +# ) def hook_except_handle(): sys.excepthook = __exception_handle -def hook_logging(**kwargs): - logging.basicConfig(handlers=[__InterceptHandler()], **kwargs) +#def hook_logging(**kwargs): +# logging.basicConfig(handlers=[__InterceptHandler()], **kwargs) diff --git a/g4f/gui/server/api.py b/g4f/gui/server/api.py index 3da0fe17794..a9e03abfa91 100644 --- a/g4f/gui/server/api.py +++ b/g4f/gui/server/api.py @@ -20,6 +20,7 @@ from g4f.providers.base_provider import ProviderModelMixin, FinishReason from g4f.providers.conversation import BaseConversation +logger = logging.getLogger(__name__) conversations: dict[dict[str, BaseConversation]] = {} images_dir = "./generated_images" @@ -184,7 +185,7 @@ def _create_response_stream(self, kwargs: dict, conversation_id: str, provider: conversations[provider][conversation_id] = chunk yield self._format_json("conversation", conversation_id) elif isinstance(chunk, Exception): - logging.exception(chunk) + logger.exception(chunk) yield self._format_json("message", get_error_message(chunk)) elif isinstance(chunk, ImagePreview): yield self._format_json("preview", chunk.to_string()) @@ -212,7 +213,7 @@ async def copy_image(image): elif not isinstance(chunk, FinishReason): yield self._format_json("content", str(chunk)) except Exception as e: - logging.exception(e) + logger.exception(e) yield self._format_json('error', get_error_message(e)) def _format_json(self, response_type: str, content): @@ -245,4 +246,4 @@ def get_error_message(exception: Exception) -> str: provider = get_last_provider() if provider is None: return message - return f"{provider.__name__}: {message}" \ No newline at end of file + return f"{provider.__name__}: {message}" diff --git a/requirements.txt b/requirements.txt index 1f75adf7149..1a014bac294 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,6 @@ PyExecJS duckduckgo-search>=5.0 nest_asyncio werkzeug -loguru pillow platformdirs fastapi diff --git a/setup.py b/setup.py index e81ee4b0755..48bbede9e86 100644 --- a/setup.py +++ b/setup.py @@ -39,7 +39,7 @@ "pillow", # image "cairosvg", # svg image "werkzeug", "flask", # gui - "loguru", "fastapi", # api + "fastapi", # api "uvicorn", "nest_asyncio", # api "pycryptodome" # openai ],