@@ -118,24 +118,48 @@ def script_template(filename, comment,
118
118
class StartedCompletedLogger ():
119
119
""" Add context to logging messages via the context attribute """
120
120
121
- def __init__ (self , logger ):
121
+ def __init__ (self , logger , \
122
+ separator_charac = "-" , \
123
+ separator_length = 50 , \
124
+ dictseparator_charac = "+" , \
125
+ dictseparator_length = 30 , \
126
+ tab_length = 4 ):
122
127
errmess = "Expected a logger object"
123
128
assert isinstance (logger , logging .Logger ), errmess
124
129
self ._logger = logger
125
130
131
+ self .separator_charac = separator_charac
132
+ self .separator_length = separator_length
133
+
134
+ self .dictseparator_charac = dictseparator_charac
135
+ self .dictseparator_length = dictseparator_length
136
+
137
+ self .tab_length = tab_length
138
+
126
139
def get_separator (self , nsep , sep ):
127
140
return sep * nsep
128
141
129
- def error (self , msg , * args , ** kwargs ):
142
+ def add_tab (self , msg , ntab ):
143
+ if ntab == 0 :
144
+ return msg
145
+
146
+ tab_space = " " * self .tab_length * ntab
147
+ return tab_space + msg
148
+
149
+ def error (self , msg , ntab = 0 , * args , ** kwargs ):
150
+ msg = self .add_tab (msg , ntab )
130
151
return self ._logger .error (msg , * args , ** kwargs )
131
152
132
- def info (self , msg , * args , ** kwargs ):
153
+ def info (self , msg , ntab = 0 , * args , ** kwargs ):
154
+ msg = self .add_tab (msg , ntab )
133
155
return self ._logger .info (msg , * args , ** kwargs )
134
156
135
- def warning (self , msg , * args , ** kwargs ):
157
+ def warning (self , msg , ntab = 0 , * args , ** kwargs ):
158
+ msg = self .add_tab (msg , ntab )
136
159
return self ._logger .warning (msg , * args , ** kwargs )
137
160
138
- def critical (self , msg , * args , ** kwargs ):
161
+ def critical (self , msg , ntab = 0 , * args , ** kwargs ):
162
+ msg = self .add_tab (msg , ntab )
139
163
return self ._logger .critical (msg , * args , ** kwargs )
140
164
141
165
@property
@@ -144,24 +168,28 @@ def handlers(self):
144
168
145
169
def started (self ):
146
170
self .info ("@@@ Process started @@@" )
147
- self .info (self .get_separator ("-" , 30 ))
171
+ self .info (self .get_separator (self .separator_charac , \
172
+ self .separator_length ))
148
173
self .info ("" )
149
174
150
175
def completed (self ):
151
176
self .info ("" )
152
- self .info (self .get_separator ("-" , 30 ))
177
+ self .info (self .get_separator (self .separator_charac , \
178
+ self .separator_length ))
153
179
self .info ("@@@ Process completed @@@" )
154
180
155
181
def log_dict (self , tolog , name = "" , level = "info" ):
156
182
""" Add log entry for dictionnary (e.g. created from argparse using vars)"""
157
183
assert level in ["info" , "warning" , "critical" , "error" ]
158
184
logfun = getattr (self , level )
159
- sep = self .get_separator ("+" , 20 )
185
+ sep = self .get_separator (self .dictseparator_charac , \
186
+ self .dictseparator_length )
160
187
logfun (sep )
161
188
if name != "" :
162
189
logfun (f"{ name } :" )
163
190
for k , v in tolog .items ():
164
- logfun (" " * 4 + f"{ k } = { v } " )
191
+ msg = self .add_tab (f"{ k } = { v } " , 1 )
192
+ logfun (msg )
165
193
166
194
logfun (sep )
167
195
logfun ("" )
@@ -171,9 +199,17 @@ def log_dict(self, tolog, name="", level="info"):
171
199
class ContextualLogger (StartedCompletedLogger ):
172
200
""" Add context to logging messages via the context attribute """
173
201
174
- def __init__ (self , logger ):
202
+ def __init__ (self , logger , \
203
+ context_hasheader = False , \
204
+ context_charac = "#" , \
205
+ context_length = 3 , \
206
+ * args , ** kwargs ):
175
207
self ._context = ""
176
- super (ContextualLogger , self ).__init__ (logger )
208
+ self .context_hasheader = context_hasheader
209
+ self .context_charac = context_charac
210
+ self .context_length = context_length
211
+
212
+ super (ContextualLogger , self ).__init__ (logger , * args , ** kwargs )
177
213
178
214
@property
179
215
def context (self ):
@@ -184,34 +220,36 @@ def context(self, value):
184
220
self ._context = ""
185
221
self .info ("" )
186
222
self ._context = str (value )
187
- if self ._context != "" :
188
- sep = self .get_separator ("#" , 3 )
223
+ if self ._context != "" and self .context_hasheader :
224
+ sep = self .get_separator (self .context_charac , \
225
+ self .context_length )
189
226
mess = sep + " " + self ._context + " " + sep
190
227
self .info (mess )
191
228
192
229
def completed (self ):
193
230
self .context = ""
194
231
super (ContextualLogger , self ).completed ()
195
232
196
- def get_message (self , msg ):
233
+ def get_message (self , msg , ntab ):
197
234
if self .context != "" :
198
- return "{{ {0} }} {1}" .format (self .context , msg )
235
+ tab = " " * self .tab_length * ntab if ntab > 0 else ""
236
+ return "{{ {0} }} {1}{2}" .format (self .context , tab , msg )
199
237
return msg
200
238
201
- def error (self , msg , * args , ** kwargs ):
202
- msg = self .get_message (msg )
239
+ def error (self , msg , ntab = 0 , * args , ** kwargs ):
240
+ msg = self .get_message (msg , ntab )
203
241
return self ._logger .error (msg , * args , ** kwargs )
204
242
205
- def info (self , msg , * args , ** kwargs ):
206
- msg = self .get_message (msg )
243
+ def info (self , msg , ntab = 0 , * args , ** kwargs ):
244
+ msg = self .get_message (msg , ntab )
207
245
return self ._logger .info (msg , * args , ** kwargs )
208
246
209
- def warning (self , msg , * args , ** kwargs ):
210
- msg = self .get_message (msg )
247
+ def warning (self , msg , ntab = 0 , * args , ** kwargs ):
248
+ msg = self .get_message (msg , ntab )
211
249
return self ._logger .warning (msg , * args , ** kwargs )
212
250
213
- def critical (self , msg , * args , ** kwargs ):
214
- msg = self .get_message (msg )
251
+ def critical (self , msg , ntab = 0 , * args , ** kwargs ):
252
+ msg = self .get_message (msg , ntab )
215
253
return self ._logger .critical (msg , * args , ** kwargs )
216
254
217
255
0 commit comments