@@ -121,11 +121,29 @@ def script_template(filename, comment,
121
121
os .chmod (filename , st .st_mode | stat .S_IEXEC )
122
122
123
123
124
- class StartedCompletedLogger (logging . Logger ):
124
+ class StartedCompletedLogger ():
125
125
""" Add context to logging messages via the context attribute """
126
126
127
- def __init__ (self , * args , ** kwargs ):
128
- super (StartedCompletedLogger , self ).__init__ (* args , ** kwargs )
127
+ def __init__ (self , logger ):
128
+ errmess = "Expected a logger object"
129
+ assert isinstance (logger , logging .Logger ), errmess
130
+ self ._logger = logger
131
+
132
+ def error (self , msg , * args , ** kwargs ):
133
+ return self ._logger .error (msg , * args , ** kwargs )
134
+
135
+ def info (self , msg , * args , ** kwargs ):
136
+ return self ._logger .info (msg , * args , ** kwargs )
137
+
138
+ def warning (self , msg , * args , ** kwargs ):
139
+ return self ._logger .warning (msg , * args , ** kwargs )
140
+
141
+ def critical (self , msg , * args , ** kwargs ):
142
+ return self ._logger .critical (msg , * args , ** kwargs )
143
+
144
+ @property
145
+ def handlers (self ):
146
+ return self ._logger .handlers
129
147
130
148
def started (self ):
131
149
self .info ("@@@ Process started @@@" )
@@ -138,37 +156,52 @@ def completed(self):
138
156
self .info ("@@@ Process completed @@@" )
139
157
140
158
141
- class HydrodiyContextualLogger (StartedCompletedLogger ):
159
+ class ContextualLogger (StartedCompletedLogger ):
142
160
""" Add context to logging messages via the context attribute """
143
161
144
- def __init__ (self , * args , ** kwargs ):
162
+ def __init__ (self , logger ):
145
163
self ._context = ""
146
- super (HydrodiyContextualLogger , self ).__init__ (* args , ** kwargs )
164
+ super (ContextualLogger , self ).__init__ (logger )
147
165
148
166
@property
149
167
def context (self ):
150
168
return self ._context
151
169
152
170
@context .setter
153
171
def context (self , value ):
172
+ self ._context = ""
173
+ self .info ("" )
154
174
self ._context = str (value )
155
175
if self ._context != "" :
156
- self .info ("" )
157
176
sep = LOGGER_SEPARATOR_CONTEXTUAL \
158
177
* LOGGER_NSEPARATORS_CONTEXTUAL
159
178
mess = sep + " " + self ._context + " " + sep
160
179
self .info (mess )
161
180
162
181
def completed (self ):
163
182
self .context = ""
164
- super (HydrodiyContextualLogger , self ).completed ()
183
+ super (ContextualLogger , self ).completed ()
165
184
166
- def _log (self , level , msg , args , exc_info = None , extra = None ):
185
+ def get_message (self , msg ):
167
186
if self .context != "" :
168
- msg = "{{ {0} }} {1}" .format (self .context , msg )
187
+ return "{{ {0} }} {1}" .format (self .context , msg )
188
+ return msg
189
+
190
+ def error (self , msg , * args , ** kwargs ):
191
+ msg = self .get_message (msg )
192
+ return self ._logger .error (msg , * args , ** kwargs )
169
193
170
- super (HydrodiyContextualLogger , self )._log (\
171
- level , msg , args , exc_info , extra )
194
+ def info (self , msg , * args , ** kwargs ):
195
+ msg = self .get_message (msg )
196
+ return self ._logger .info (msg , * args , ** kwargs )
197
+
198
+ def warning (self , msg , * args , ** kwargs ):
199
+ msg = self .get_message (msg )
200
+ return self ._logger .warning (msg , * args , ** kwargs )
201
+
202
+ def critical (self , msg , * args , ** kwargs ):
203
+ msg = self .get_message (msg )
204
+ return self ._logger .critical (msg , * args , ** kwargs )
172
205
173
206
174
207
def get_logger (name , level = "INFO" , \
@@ -271,17 +304,13 @@ def catcherr(exc_type, exc_value, exc_traceback):
271
304
# Close all handlers
272
305
[h .close () for h in logger .handlers ]
273
306
274
- # Create the contextual logger
275
- if contextual :
276
- # A bit dangerous, but will do for now
277
- logger .__class__ = HydrodiyContextualLogger
278
- logger .context = ""
279
- else :
280
- logger .__class__ = StartedCompletedLogger
307
+ # Create the extended logger
308
+ elogger = ContextualLogger (logger ) if contextual else \
309
+ StartedCompletedLogger (logger )
281
310
282
311
if start_message :
283
- logger .started ()
312
+ elogger .started ()
284
313
285
- return logger
314
+ return elogger
286
315
287
316
0 commit comments