Making a logging handler that produces context.

A

Antoon Pardon

I have some in house code for which I am considering replacing the
logging code
with something that uses the logging module.

The code is typically used as a cron job with everything higher than
info logged to
a file and everything higher than warning logged to stderr.

However there is one thing the in-house log code does, that seems
difficult to do
with the logging module, provide some context. The in-house handlers
give the
possibilty to specify the number of lines of context the hander can provide.

So the following code:

Logger(fn = "file.log", level = info)
Logger(fl = stderr, level = warning, context = 2)

log(INFO, "line 1")
log(INFO, "line 2")
log(INFO, "line 3")
log(INFO, "line 4")
log(WARNING, "line 5")

Will sent something like the following lines to stderr:

INFO: line 3
INFO: line 4
WARNING: line 5

I tried the code below, but that produced the same
as the ordinary StreamHandler.

class ContextStreamHandler (StreamHandler):

def __init__(self, stream=None, context = 5):
self.recqueue = deque([], context)
StreamHandler.__init__(self, stream)
#__init__

def handle(self, record):
print("CONTEXT HANDLER")
rv = self.filter(record)
if rv:
self.acquire()
try:
for rec in self.recqueue:
self.emit(rec)
self.recqueue.clear()
self.emit(record)
finally:
self.release
else:
self.recqueue.append(record)
return rv
#handle
#ContextStreamHandler
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top