@@ -22,53 +22,98 @@ def format(self, record: logging.LogRecord) -> str:
22
22
return super ().format (record )
23
23
24
24
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