[Fix] Prevent Python Firecrawl logger from interfering with loggers in client applications (#613)
Some checks are pending
Deploy Images to GHCR / push-app-image (push) Waiting to run

* Prevent firecrawl logger from interfering with other loggers

* Always check if logger has handlers

---------

Co-authored-by: Gergő Móricz <mo.geryy@gmail.com>
This commit is contained in:
Dmitriy Vasilyuk 2024-11-04 23:33:39 -08:00 committed by GitHub
parent 9e22c9a428
commit 2fa25cb992
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -11,7 +11,7 @@ For more information visit https://github.com/firecrawl/
import logging
import os
from .firecrawl import FirecrawlApp
from .firecrawl import FirecrawlApp # noqa
__version__ = "1.4.0"
@ -19,24 +19,46 @@ __version__ = "1.4.0"
logger: logging.Logger = logging.getLogger("firecrawl")
def _basic_config() -> None:
"""Set up basic configuration for logging with a specific format and date format."""
def _configure_logger() -> None:
"""
Configure the firecrawl logger for console output.
The function attaches a handler for console output with a specific format and date
format to the firecrawl logger.
"""
try:
logging.basicConfig(
format="[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
# Create the formatter
formatter = logging.Formatter(
"[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
# Create the console handler and set the formatter
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
# Add the console handler to the firecrawl logger
logger.addHandler(console_handler)
except Exception as e:
logger.error("Failed to configure logging: %s", e)
def setup_logging() -> None:
"""Set up logging based on the FIRECRAWL_LOGGING_LEVEL environment variable."""
env = os.environ.get(
"FIRECRAWL_LOGGING_LEVEL", "INFO"
).upper() # Default to 'INFO' level
_basic_config()
# Check if the firecrawl logger already has a handler
if logger.hasHandlers():
return # To prevent duplicate logging
# Check if the FIRECRAWL_LOGGING_LEVEL environment variable is set
if not (env := os.getenv("FIRECRAWL_LOGGING_LEVEL", "").upper()):
# Attach a no-op handler to prevent warnings about no handlers
logger.addHandler(logging.NullHandler())
return
# Attach the console handler to the firecrawl logger
_configure_logger()
# Set the logging level based on the FIRECRAWL_LOGGING_LEVEL environment variable
if env == "DEBUG":
logger.setLevel(logging.DEBUG)
elif env == "INFO":