On Wed, Jul 6, 2016 at 1:01 PM, Alex Hall <ah...@autodist.com> wrote:
> Regarding this project: I've gone ahead and tried a variant of it. I > wanted to log to an HTML file, since those are much easier to look at with > a screen reader and so I could get used to the concepts involved. Here's > what I've come up with so far. I'll ask the question, then paste the code. > I'm getting an error on the self.stream.write line in _open that > "'ADTimedRotatingLogFileHandler' has no attribute stream". If I'm > subclassing TimedRotatingFileHandler, how can it not have stream? > Again, in case someone is searching for an answer later and finds this thread: you must assign it. def _open(self): self.stream = super(ADTimedRotatingLogFileHandler, self)._open() I'm now getting a different error, in close(): TypeError: must be type, not None I'm not sure what that's about, but at least I now know why I wasn't getting a stream. > > import logging > import logging.handlers as logHandlers > class ADTimedRotatingLogFileHandler(logHandlers.TimedRotatingFileHandler): > > def __init__(self, filename, when, interval, backupCount, title): > """Most parameters are for the superclass, but 'title' is the > title you want your HTML file to have.""" > super(ADTimedRotatingLogFileHandler, self).__init__(filename, > when, interval, backupCount) > self._title = title > > def _open(self): > super(ADTimedRotatingLogFileHandler, self)._open() > self.stream.write("""<html> > <head> > <title>%s</title> > </head> > <body> > """ %(self._title)) > > def close(self): > self.stream.write(""" > </body> > </html>""") > super(ADTimedRotatingLogFileHandler, self).close() > > > On Wed, Jul 6, 2016 at 8:32 AM, Alex Hall <ah...@autodist.com> wrote: > >> Hey list, >> Another day, another Python experiment. I'm wondering what methods I'd >> have to implement in a custom subclass of logger.Handler. >> >> Currently, the recurring jobs I have written log their events to a file >> each time they run. That's fine, but it doesn't let me keep >> easily-sorted/searched records. Even if I use a size-based log file >> handler, it'll get hard to search. I'm pondering logging to a database as >> well, so that the files will always have the most recent few runs, but the >> database will have everything. That means subclassing logger.Handler. >> >> I found the docs for this, but is emit() the only function I need to >> implement? There are things about i/o locks, formatting, and so on as well. >> How much do I need to do, and how much can I leave up to the super class? >> I'll have to call >> super(MyLogHandler, self).__init__() >> I know, but what else do I have to worry about? To be clear, I'm not >> asking about logging to a database, only what to do to make a Handler >> subclass capable of logging through whatever mechanisms I want. Thanks. >> >> -- >> Alex Hall >> Automatic Distributors, IT department >> ah...@autodist.com >> > > > > -- > Alex Hall > Automatic Distributors, IT department > ah...@autodist.com > -- Alex Hall Automatic Distributors, IT department ah...@autodist.com _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor