@@ -75,32 +75,86 @@ def filter(self, record) -> bool:
7575 record .relfilename = relfilename
7676 return True
7777
78- # Log format looks like:
79- # 00109ms:MSCommon/vc.py:find_vc_pdir#447: VC found '14.3' [file]
80- # debug: 00109ms:MSCommon/vc.py:find_vc_pdir#447: VC found '14.3' [stdout]
81- log_format = (
82- '%(relativeCreated)05dms'
83- ':%(relfilename)s'
84- ':%(funcName)s'
85- '#%(lineno)s'
86- ': %(message)s'
87- )
78+ class _CustomFormatter (logging .Formatter ):
79+
80+ # Log format looks like:
81+ # 00109ms:MSCommon/vc.py:find_vc_pdir#447: VC found '14.3' [file]
82+ # debug: 00109ms:MSCommon/vc.py:find_vc_pdir#447: VC found '14.3' [stdout]
83+
84+ log_format = (
85+ '%(relativeCreated)05dms'
86+ ':%(relfilename)s'
87+ ':%(funcName)s'
88+ '#%(lineno)s'
89+ ': %(message)s'
90+ )
91+
92+ log_format_classname = (
93+ '%(relativeCreated)05dms'
94+ ':%(relfilename)s'
95+ ':%(classname)s'
96+ '.%(funcName)s'
97+ '#%(lineno)s'
98+ ': %(message)s'
99+ )
100+
101+ def __init__ (self , log_prefix ):
102+ super ().__init__ ()
103+ if log_prefix :
104+ self .log_format = log_prefix + self .log_format
105+ self .log_format_classname = log_prefix + self .log_format_classname
106+ log_record = logging .LogRecord (
107+ '' , # name (str)
108+ 0 , # level (int)
109+ '' , # pathname (str)
110+ 0 , # lineno (int)
111+ None , # msg (Any)
112+ {}, # args (tuple | dict[str, Any])
113+ None # exc_info (tuple[type[BaseException], BaseException, types.TracebackType] | None)
114+ )
115+ self .default_attrs = set (log_record .__dict__ .keys ())
116+ self .default_attrs .add ('relfilename' )
117+
118+ def format (self , record ):
119+ extras = set (record .__dict__ .keys ()) - self .default_attrs
120+ if 'classname' in extras :
121+ log_format = self .log_format_classname
122+ else :
123+ log_format = self .log_format
124+ formatter = logging .Formatter (log_format )
125+ return formatter .format (record )
126+
88127 if LOGFILE == '-' :
89- log_format = 'debug: ' + log_format
128+ log_prefix = 'debug: '
90129 log_handler = logging .StreamHandler (sys .stdout )
91130 else :
131+ log_prefix = ''
92132 log_handler = logging .FileHandler (filename = LOGFILE )
93- log_formatter = logging . Formatter ( log_format )
133+ log_formatter = _CustomFormatter ( log_prefix )
94134 log_handler .setFormatter (log_formatter )
95135 logger = logging .getLogger (name = __name__ )
96136 logger .setLevel (level = logging .DEBUG )
97137 logger .addHandler (log_handler )
98138 logger .addFilter (_Debug_Filter ())
99139 debug = logger .debug
140+
141+ def debug_extra (cls = None ):
142+ if cls :
143+ extra = {'classname' : cls .__qualname__ }
144+ else :
145+ extra = None
146+ return extra
147+
148+ DEBUG_ENABLED = True
149+
100150else :
101- def debug (x , * args ):
151+ def debug (x , * args , ** kwargs ):
152+ return None
153+
154+ def debug_extra (* args , ** kwargs ):
102155 return None
103156
157+ DEBUG_ENABLED = False
104158
105159# SCONS_CACHE_MSVC_CONFIG is public, and is documented.
106160CONFIG_CACHE = os .environ .get ('SCONS_CACHE_MSVC_CONFIG' , '' )
0 commit comments