@@ -6,8 +6,8 @@ The `logging` module provides functionality for flexible event logging, with dif
66
77| Operation | Time | Space | Notes |
88| -----------| ------| -------| -------|
9- | ` logging.basicConfig() ` | O(1) | O(1) | Configure logging |
10- | ` logger.debug/info/warning/error() ` | O(k) | O(1) | k = message length |
9+ | ` logging.basicConfig() ` | Varies | Varies | Creates handlers/formatters |
10+ | ` logger.debug/info/warning/error() ` | Varies | Varies | Depends on handlers, filters, and I/O |
1111| ` getLogger() ` | O(1) avg | O(1) | Get logger instance |
1212| Formatting message | O(k) | O(k) | k = formatted string |
1313
@@ -18,13 +18,13 @@ The `logging` module provides functionality for flexible event logging, with dif
1818``` python
1919import logging
2020
21- # Configure logging - O(1)
21+ # Configure logging - cost depends on handlers
2222logging.basicConfig(
2323 level = logging.INFO ,
2424 format = ' %(asctime)s - %(levelname)s - %(message)s '
2525)
2626
27- # Log messages - O(k)
27+ # Log messages - cost depends on handlers and I/O
2828logging.debug(' Debug message' ) # Not shown (level=INFO)
2929logging.info(' Info message' ) # O(10)
3030logging.warning(' Warning message' ) # O(15)
@@ -42,7 +42,7 @@ logger = logging.getLogger(__name__)
4242# Set level - O(1)
4343logger.setLevel(logging.DEBUG )
4444
45- # Log messages - O(k)
45+ # Log messages - cost depends on handlers and I/O
4646logger.debug(' Debug: %s ' , variable) # O(k)
4747logger.info(' Processing: %s ' , item) # O(k)
4848logger.warning(' Issue: %s ' , issue) # O(k)
@@ -73,12 +73,12 @@ formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(messag
7373file_handler.setFormatter(formatter)
7474console_handler.setFormatter(formatter)
7575
76- # Add handlers - O(1) each
76+ # Add handlers - O(1) each (list append)
7777logger.addHandler(file_handler) # O(1)
7878logger.addHandler(console_handler) # O(1)
7979
80- # Log - O(k)
81- logger.info(' Application started' ) # O(k)
80+ # Log - cost depends on handlers and I/O
81+ logger.info(' Application started' )
8282```
8383
8484## Log Levels
@@ -100,7 +100,7 @@ logger.setLevel(logging.WARNING)
100100
101101# Only WARNING and above are logged
102102logger.debug(' Not logged' ) # Skipped
103- logger.warning(' Is logged' ) # O(k)
103+ logger.warning(' Is logged' )
104104```
105105
106106## Common Patterns
@@ -121,16 +121,16 @@ logger = logging.getLogger(__name__)
121121
122122def process_file (filename ):
123123 try :
124- logger.info(f ' Processing { filename} ' ) # O(k)
124+ logger.info(f ' Processing { filename} ' )
125125 with open (filename) as f:
126126 data = f.read() # O(n)
127- logger.debug(f ' Read { len (data)} bytes ' ) # O(k)
127+ logger.debug(f ' Read { len (data)} bytes ' )
128128 return process(data)
129129 except FileNotFoundError :
130- logger.error(f ' File not found: { filename} ' ) # O(k)
130+ logger.error(f ' File not found: { filename} ' )
131131 return None
132132 except Exception as e:
133- logger.exception(f ' Unexpected error: { e} ' ) # O(k)
133+ logger.exception(f ' Unexpected error: { e} ' )
134134 return None
135135```
136136
@@ -144,9 +144,9 @@ logger = logging.getLogger(__name__)
144144try :
145145 result = risky_operation() # Might fail
146146except ValueError as e:
147- logger.error(f ' Invalid value: { e} ' ) # O(k)
147+ logger.error(f ' Invalid value: { e} ' )
148148except Exception as e:
149- logger.exception(' Unexpected error' ) # O(k) - includes traceback
149+ logger.exception(' Unexpected error' ) # Includes traceback
150150```
151151
152152## Performance Considerations
@@ -172,14 +172,14 @@ logger.debug(f'User {username} logged in') # Always format string
172172``` python
173173import logging
174174
175- # File handler - O(k) to write
175+ # File handler - cost depends on I/O and buffering
176176handler = logging.FileHandler(' app.log' )
177177
178178# Buffering affects performance
179179# Default: buffered (fast)
180180# Unbuffered: flush each write (slow but safer)
181181
182- # Rotating file handler - O(k) per write
182+ # Rotating file handler - cost depends on I/O and rollover
183183rotating = logging.handlers.RotatingFileHandler(
184184 ' app.log' ,
185185 maxBytes = 1000000 , # 1MB
@@ -189,9 +189,7 @@ rotating = logging.handlers.RotatingFileHandler(
189189
190190## Version Notes
191191
192- - ** Python 2.x** : logging module available
193- - ** Python 3.x** : Enhanced with better formatting
194- - ** All versions** : O(k) logging complexity
192+ - ** Python 3.x** : ` logging ` module is available
195193
196194## Related Modules
197195
0 commit comments