On Apr 11, 12:30 am, Dennis Lee Bieber <wlfr...@ix.netcom.com> wrote: > On Fri, 10 Apr 2009 13:25:25 -0700 (PDT), dj <d.a.aberna...@gmail.com> > declaimed the following in gmane.comp.python.general: > > > > > I have a handler which I use with a set of log levels for the python > > logging module. > > > ----------------------------------- myhandler.py > > -------------------------------------------------------- > > import logging.handlers > > > # create my handler class > > class MyHandler(logging.handlers.RotatingFileHandler): > > def __init__(self, fn): > > logging.handlers.RotatingFileHandler.__init__(self, fn, > > > maxBytes=10485760, backupCount=5) > > > # Register handler in the "logging.handlers" namespace > > logging.handlers.MyHandler = MyHandler > > Don't you need to pass an INSTANCE of the handler? Or SOMEWHERE > create an instance for use. Note that the filename is one of the > arguments needed to initialize this, and since we see no code with a > root file name ... ??? > > No addHandler() anywhere? > > > -------------------------------------------------------------------------------------------------------------------- > > > Using it, repeatedly generates this error: > > > Traceback (most recent call last): > > File "C:\python26\lib\logging\handlers.py", line 74, in emit > > if self.shouldRollover(record): > > File "C:\python26\lib\logging\handlers.py", line 146, in > > shouldRollover > > self.stream.seek(0, 2) #due to non-posix-compliant Windows > > feature > > ValueError: I/O operation on closed file > > That's a rather short traceback -- where are the calls to the logger > that would trigger the emit() call? Where do you specify that this > handler is suppose to be used > -- > Wulfraed Dennis Lee Bieber KD6MOG > wlfr...@ix.netcom.com wulfr...@bestiaria.com > HTTP://wlfraed.home.netcom.com/ > (Bestiaria Support Staff: web-a...@bestiaria.com) > HTTP://www.bestiaria.com/
Hello again, I thought I included the specifics of my custom logger, but I did not do that. Please allow me to present this issue again with the complete details. --------------- myhandler.py ----------------------- import logging.handlers # create my handler class class MyHandler(logging.handlers.RotatingFileHandler): def __init__(self, fn): logging.handlers.RotatingFileHandler.__init__(self, fn, maxBytes=10485760, backupCount=5) # Register handler in the "logging.handlers" namespace logging.handlers.MyHandler = MyHandler --------------- myLogs.py ------------------------- import logging import logging.handlers from myhandler import MyHandler #custom handler import os ##### EXCLUDED THE DETAILS FOR THE CUSTOMIZED LOGGER ############################ #log file formatter format = logging.Formatter("%(asctime)s %(levelname)s %(filename)s % (lineno)d %(message)s") # setup the logger instance log = logging.getLogger("app_log") # set the log level log.setLevel(logging.DEBUG) # add a method for the custom log level to the logger setattr(log, 'userinfo', lambda *args: log.log(USERINFO, *args)) # create the handler for app.log app_handler = logging.handlers.MyHandler(APP_LOG_FILENAME) #using myhandler # set handler level app_handler.setLevel(logging.DEBUG) # add the formatter to the handler app_handler.setFormatter(format) # create the handler for notice.log notice_handler = logging.handlers.MyHandler(NOTICE_LOG_FILENAME) # using my handler # set handler level notice_handler.setLevel(logging.ERROR) # add the formatter to the handler notice_handler.setFormatter(format) # setup the logger for user.log userLog = logging.getLogger("user_log") # set the level userLog.setLevel(logging.INFO) # add a method for the custom log level to the logger setattr(userLog, 'userinfo', lambda *args: userLog.log(USERINFO, *args)) # create the handler for user.log user_handler = logging.handlers.MyHandler(USER_LOG_FILENAME) # using myhandler # handler level user_handler.setLevel(logging.INFO) # add the formatter to the handler user_handler.setFormatter(format) # add the handlers to log log.addHandler(app_handler) log.addHandler(notice_handler) # add the handler to userLog userLog.addHandler(user_handler) --------- app.py ----------------------------------- import logging import myLogs myLogs.log.debug('this is debug message') ########################################################### I hope this provides much better clarification. -- http://mail.python.org/mailman/listinfo/python-list