forked from goodboy/tractor
				
			`StackLevelAdapter._log(stacklevel: int)` for custom levels..
Apparently (and i don't know if this was always broken [i feel like no?] or is a recent change to stdlib's `logging` stuff) we need increment the `stacklevel` input by one for our custom level methods now? Without this you're going to see the path to the method's-callstack-frame on every emission instead of to the caller's. I first noticed this when debugging the workspace layer spawning in `modden.bigd` and then verified it in other depended projects.. I guess we should add some tests for this as well XDremotes/1757153874605917753/main
							parent
							
								
									44e386dd99
								
							
						
					
					
						commit
						74aa5aa9cd
					
				|  | @ -48,12 +48,15 @@ LOG_FORMAT = ( | |||
| 
 | ||||
| DATE_FORMAT = '%b %d %H:%M:%S' | ||||
| 
 | ||||
| LEVELS = { | ||||
| LEVELS: dict[str, int] = { | ||||
|     'TRANSPORT': 5, | ||||
|     'RUNTIME': 15, | ||||
|     'CANCEL': 16, | ||||
|     'PDB': 500, | ||||
| } | ||||
| # _custom_levels: set[str] = { | ||||
| #     lvlname.lower for lvlname in LEVELS.keys() | ||||
| # } | ||||
| 
 | ||||
| STD_PALETTE = { | ||||
|     'CRITICAL': 'red', | ||||
|  | @ -102,7 +105,11 @@ class StackLevelAdapter(logging.LoggerAdapter): | |||
|         Cancellation logging, mostly for runtime reporting. | ||||
| 
 | ||||
|         ''' | ||||
|         return self.log(16, msg) | ||||
|         return self.log( | ||||
|             level=16, | ||||
|             msg=msg, | ||||
|             # stacklevel=4, | ||||
|         ) | ||||
| 
 | ||||
|     def pdb( | ||||
|         self, | ||||
|  | @ -114,14 +121,37 @@ class StackLevelAdapter(logging.LoggerAdapter): | |||
|         ''' | ||||
|         return self.log(500, msg) | ||||
| 
 | ||||
|     def log(self, level, msg, *args, **kwargs): | ||||
|         """ | ||||
|     def log( | ||||
|         self, | ||||
|         level, | ||||
|         msg, | ||||
|         *args, | ||||
|         **kwargs, | ||||
|     ): | ||||
|         ''' | ||||
|         Delegate a log call to the underlying logger, after adding | ||||
|         contextual information from this adapter instance. | ||||
|         """ | ||||
| 
 | ||||
|         ''' | ||||
|         if self.isEnabledFor(level): | ||||
|             stacklevel: int = 3 | ||||
|             if ( | ||||
|                 level in LEVELS.values() | ||||
|                 # or level in _custom_levels | ||||
|             ): | ||||
|                 stacklevel: int = 4 | ||||
| 
 | ||||
|             # msg, kwargs = self.process(msg, kwargs) | ||||
|             self._log(level, msg, args, **kwargs) | ||||
|             self._log( | ||||
|                 level=level, | ||||
|                 msg=msg, | ||||
|                 args=args, | ||||
|                 # NOTE: not sure how this worked before but, it | ||||
|                 # seems with our custom level methods defined above | ||||
|                 # we do indeed (now) require another stack level?? | ||||
|                 stacklevel=stacklevel, | ||||
|                 **kwargs, | ||||
|             ) | ||||
| 
 | ||||
|     # LOL, the stdlib doesn't allow passing through ``stacklevel``.. | ||||
|     def _log( | ||||
|  | @ -134,12 +164,15 @@ class StackLevelAdapter(logging.LoggerAdapter): | |||
|         stack_info=False, | ||||
| 
 | ||||
|         # XXX: bit we added to show fileinfo from actual caller. | ||||
|         # this level then ``.log()`` then finally the caller's level.. | ||||
|         stacklevel=3, | ||||
|         # - this level | ||||
|         # - then ``.log()`` | ||||
|         # - then finally the caller's level.. | ||||
|         stacklevel=4, | ||||
|     ): | ||||
|         """ | ||||
|         ''' | ||||
|         Low-level log implementation, proxied to allow nested logger adapters. | ||||
|         """ | ||||
| 
 | ||||
|         ''' | ||||
|         return self.logger._log( | ||||
|             level, | ||||
|             msg, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue