[Fix] Prevent Python Firecrawl logger from interfering with loggers in client applications (#613)
* 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:
@@ -11,7 +11,7 @@ For more information visit https://github.com/firecrawl/
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from .firecrawl import FirecrawlApp
|
from .firecrawl import FirecrawlApp # noqa
|
||||||
|
|
||||||
__version__ = "1.4.0"
|
__version__ = "1.4.0"
|
||||||
|
|
||||||
@@ -19,24 +19,46 @@ __version__ = "1.4.0"
|
|||||||
logger: logging.Logger = logging.getLogger("firecrawl")
|
logger: logging.Logger = logging.getLogger("firecrawl")
|
||||||
|
|
||||||
|
|
||||||
def _basic_config() -> None:
|
def _configure_logger() -> None:
|
||||||
"""Set up basic configuration for logging with a specific format and date format."""
|
"""
|
||||||
|
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:
|
try:
|
||||||
logging.basicConfig(
|
# Create the formatter
|
||||||
format="[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
|
formatter = logging.Formatter(
|
||||||
|
"[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
|
||||||
datefmt="%Y-%m-%d %H:%M:%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:
|
except Exception as e:
|
||||||
logger.error("Failed to configure logging: %s", e)
|
logger.error("Failed to configure logging: %s", e)
|
||||||
|
|
||||||
|
|
||||||
def setup_logging() -> None:
|
def setup_logging() -> None:
|
||||||
"""Set up logging based on the FIRECRAWL_LOGGING_LEVEL environment variable."""
|
"""Set up logging based on the FIRECRAWL_LOGGING_LEVEL environment variable."""
|
||||||
env = os.environ.get(
|
# Check if the firecrawl logger already has a handler
|
||||||
"FIRECRAWL_LOGGING_LEVEL", "INFO"
|
if logger.hasHandlers():
|
||||||
).upper() # Default to 'INFO' level
|
return # To prevent duplicate logging
|
||||||
_basic_config()
|
|
||||||
|
|
||||||
|
# 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":
|
if env == "DEBUG":
|
||||||
logger.setLevel(logging.DEBUG)
|
logger.setLevel(logging.DEBUG)
|
||||||
elif env == "INFO":
|
elif env == "INFO":
|
||||||
|
|||||||
Reference in New Issue
Block a user