Skip to content

Commit 9712d4c

Browse files
committed
fix: logger working properly now
1 parent cd1169b commit 9712d4c

File tree

4 files changed

+101
-56
lines changed

4 files changed

+101
-56
lines changed

scrapegraph-py/examples/async_smartscraper_example.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import asyncio
22

33
from scrapegraph_py import AsyncClient
4-
from scrapegraph_py.logger import get_logger
4+
from scrapegraph_py.logger import sgai_logger
55

6-
get_logger(level="DEBUG")
6+
sgai_logger.set_logging(level="INFO")
77

88

99
async def main():

scrapegraph-py/examples/feedback_credits_example.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from scrapegraph_py import SyncClient
2-
from scrapegraph_py.logger import get_logger
2+
from scrapegraph_py.logger import sgai_logger
33

4-
get_logger(level="DEBUG")
4+
sgai_logger.set_logging(level="INFO")
55

66
# Initialize the client
77
sgai_client = SyncClient(api_key="your-api-key-here")

scrapegraph-py/examples/smartscraper_example.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from scrapegraph_py import SyncClient
2-
from scrapegraph_py.logger import get_logger
2+
from scrapegraph_py.logger import sgai_logger
33

4-
get_logger(level="DEBUG")
4+
sgai_logger.set_logging(level="INFO")
55

66
# Initialize the client
77
sgai_client = SyncClient(api_key="your-api-key-here")

scrapegraph-py/scrapegraph_py/logger.py

+95-50
Original file line numberDiff line numberDiff line change
@@ -22,53 +22,98 @@ def format(self, record: logging.LogRecord) -> str:
2222
return super().format(record)
2323

2424

25-
def get_logger(
26-
name: str = "scrapegraph",
27-
level: str = "INFO",
28-
log_file: Optional[str] = None,
29-
log_format: Optional[str] = None,
30-
) -> logging.Logger:
31-
"""
32-
Get a configured logger instance with emoji support.
33-
34-
Args:
35-
name: Name of the logger (default: 'scrapegraph')
36-
level: Logging level (default: 'INFO')
37-
log_file: Optional file path to write logs to
38-
log_format: Optional custom log format string
39-
40-
Returns:
41-
logging.Logger: Configured logger instance
42-
"""
43-
logger = logging.getLogger(name)
44-
45-
# Return existing logger if already configured
46-
if logger.handlers:
47-
return logger
48-
49-
# Set log level
50-
level = getattr(logging, level.upper(), logging.INFO)
51-
logger.setLevel(level)
52-
53-
# Default format if none provided
54-
if not log_format:
55-
log_format = "%(levelname)-6s %(asctime)-15s %(message)s"
56-
57-
formatter = EmojiFormatter(log_format)
58-
59-
# Console handler
60-
console_handler = logging.StreamHandler()
61-
console_handler.setFormatter(formatter)
62-
logger.addHandler(console_handler)
63-
64-
# File handler if log_file specified
65-
if log_file:
66-
file_handler = logging.FileHandler(log_file)
67-
file_handler.setFormatter(formatter)
68-
logger.addHandler(file_handler)
69-
70-
return logger
71-
72-
73-
# Default sgai logger instance
74-
sgai_logger = get_logger()
25+
class ScrapegraphLogger:
26+
"""Class to manage Scrapegraph logging configuration"""
27+
28+
_instance = None
29+
_initialized = False
30+
31+
def __new__(cls):
32+
if cls._instance is None:
33+
cls._instance = super(ScrapegraphLogger, cls).__new__(cls)
34+
return cls._instance
35+
36+
def __init__(self):
37+
if not self._initialized:
38+
self.logger = logging.getLogger("scrapegraph")
39+
self.logger.setLevel(logging.INFO)
40+
self.enabled = False
41+
self._initialized = True
42+
43+
def set_logging(
44+
self,
45+
level: Optional[str] = None,
46+
log_file: Optional[str] = None,
47+
log_format: Optional[str] = None,
48+
) -> None:
49+
"""
50+
Configure logging settings. If level is None, logging will be disabled.
51+
52+
Args:
53+
level: Logging level (e.g., 'DEBUG', 'INFO'). None to disable logging.
54+
log_file: Optional file path to write logs to
55+
log_format: Optional custom log format string
56+
"""
57+
# Clear existing handlers
58+
self.logger.handlers.clear()
59+
60+
if level is None:
61+
# Disable logging
62+
self.enabled = False
63+
return
64+
65+
# Enable logging with specified level
66+
self.enabled = True
67+
level = getattr(logging, level.upper(), logging.INFO)
68+
self.logger.setLevel(level)
69+
70+
# Default format if none provided
71+
if not log_format:
72+
log_format = "%(emoji)s %(asctime)-15s %(message)s"
73+
74+
formatter = EmojiFormatter(log_format)
75+
76+
# Console handler
77+
console_handler = logging.StreamHandler()
78+
console_handler.setFormatter(formatter)
79+
self.logger.addHandler(console_handler)
80+
81+
# File handler if log_file specified
82+
if log_file:
83+
file_handler = logging.FileHandler(log_file)
84+
file_handler.setFormatter(formatter)
85+
self.logger.addHandler(file_handler)
86+
87+
def disable(self) -> None:
88+
"""Disable all logging"""
89+
self.logger.handlers.clear()
90+
self.enabled = False
91+
92+
def debug(self, message: str) -> None:
93+
"""Log debug message if logging is enabled"""
94+
if self.enabled:
95+
self.logger.debug(message)
96+
97+
def info(self, message: str) -> None:
98+
"""Log info message if logging is enabled"""
99+
if self.enabled:
100+
self.logger.info(message)
101+
102+
def warning(self, message: str) -> None:
103+
"""Log warning message if logging is enabled"""
104+
if self.enabled:
105+
self.logger.warning(message)
106+
107+
def error(self, message: str) -> None:
108+
"""Log error message if logging is enabled"""
109+
if self.enabled:
110+
self.logger.error(message)
111+
112+
def critical(self, message: str) -> None:
113+
"""Log critical message if logging is enabled"""
114+
if self.enabled:
115+
self.logger.critical(message)
116+
117+
118+
# Default logger instance
119+
sgai_logger = ScrapegraphLogger()

0 commit comments

Comments
 (0)