socketLogging.py

Go to the documentation of this file.
00001 #!/usr/local/bin/python
00002 #
00003 #                               Copyright 2005
00004 #                                     by
00005 #                        The Board of Trustees of the
00006 #                     Leland Stanford Junior University.
00007 #                            All rights reserved.
00008 #
00009 
00010 __facility__ = "Online"
00011 __abstract__ = "GLAST LAT Alert System GUI"
00012 __author__   = "J. Panetta"
00013 __date__     = "2005/07/23 00:08:27"
00014 __updated__  = "$Date: 2005/09/22 00:29:30 $"
00015 __version__  = "$Revision: 1.4 $"
00016 __release__  = "$Name: HEAD $"
00017 __credits__  = "SLAC"
00018 
00019 import LICOS.copyright_SLAC
00020 import logging
00021 import logging.handlers
00022 import sys
00023 ALARM_TCP_LOGGING_PORT    = 9099
00024 
00025 class MyLogSocketHandler(logging.handlers.SocketHandler):
00026   """!\brief Socket log handler for alerts
00027 
00028   """
00029   def __init__(self, *args):
00030     """!\brief MyLogSocketHandler constructor
00031 
00032     \param *args Arguments to MyLogSocketHandler constructor
00033     """
00034     apply(logging.handlers.SocketHandler.__init__, (self,) + args)
00035 
00036   def handleError(self, record):
00037     """!\brief Error handler
00038 
00039     \param record Log record
00040     """
00041     if self.closeOnError and self.sock:
00042       self.sock.shutdown(2)
00043       self.sock.close()
00044       self.sock = None        #try to reconnect next time
00045     else:
00046       raise IOError, sys.exc_info()[1]
00047 
00048   def createSocket(self):
00049     """!\brief createSocket
00050 
00051     Override base classes createSocket method.
00052     This isn't allowed to fail silently
00053     """
00054     self.sock = self.makeSocket()
00055 
00056 def socketLogging(logHost, logLevel, port=ALARM_TCP_LOGGING_PORT):
00057   """!\brief Setup logging for alerts.
00058 
00059   \param logHost  Log host
00060   \param logLevel Log level
00061   \param port     TCP logging port
00062   """
00063   logging.root.setLevel(logging.__dict__[logLevel])
00064 
00065   # set up the socket handler for this logger
00066   sockHdlr   = MyLogSocketHandler(logHost, port)
00067 
00068   fmt = logging.Formatter("%(asctime)s %(filename)s:%(lineno)d %(levelname)-5s - %(message)s")
00069   sockHdlr.setFormatter(fmt)
00070   logging.getLogger().addHandler(sockHdlr)
00071 
00072   try:
00073     logging.info('Trying to connect to the message logger')
00074   except Exception, e:
00075     logging.getLogger("").removeHandler(sockHdlr)
00076     logging.fatal("Can't connect to the message logger, Aborting job")
00077     raise
00078   else:
00079     logging.info('Successfully connected to the message logger')
00080 

Generated on Thu Apr 27 20:52:43 2006 for LICOS L02-01-00 by doxygen 1.4.6-NO