Changeset 270


Ignore:
Timestamp:
09/15/2010 04:37:08 PM (12 years ago)
Author:
marcus
Message:

-.added logging options to configuration

  • some warnings while reading config
Location:
SHX/trunk/src/SeismicHandler
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/src/SeismicHandler/modules/log.py

    r258 r270  
    2323 
    2424from SeismicHandler.basics import Singleton 
     25from SeismicHandler.modules.runtime import runtime 
    2526import logging 
    2627import os 
    2728import atexit 
     29import warnings 
    2830 
    2931class Logging(object): 
     
    3234 
    3335    def __init__(self): 
     36        if not self.logging: 
     37            self.setup() 
     38 
     39    def setup(self): 
    3440        """configure logging once""" 
    3541 
    36 #        logging.Logger.__init__(self, "shx") 
     42        # get log level 
     43        level_file = runtime().config.logging.level_file[0] 
     44        level_screen = runtime().config.logging.level_screen[0] 
    3745 
    38         if not self.logging: 
    39             # get temp directory for logfile 
    40             try: 
    41                 # mostly set on windows 
    42                 dir = os.environ["TEMP"] 
    43             except KeyError: 
    44                 # assume linux system 
    45                 dir = "/tmp/" 
     46        # get temp directory for logfile 
     47        try: 
     48            # mostly set on windows 
     49            directory = os.environ["TEMP"] 
     50        except KeyError: 
     51            # assume linux system 
     52            directory = "/tmp/" 
    4653 
    47             # recent logfile depends on pid - concurrently running processes get 
    48             # a new logfile each 
    49             logfile = 'sh-%u.log' % os.getpid() 
    50             self.logdest = os.path.join(dir, logfile) 
     54        # recent logfile depends on pid - concurrently running processes get 
     55        # a new logfile each 
     56        logfile = 'sh-%u.log' % os.getpid() 
     57        self.logdest = os.path.join(directory, logfile) 
    5158 
    52             # backup location depends on user id (just to avoid permission issues) 
    53             backupfile = 'shbckp-%s.log' % os.getuid() 
    54             self.backupdest = os.path.join(dir, backupfile) 
     59        # backup location depends on user id (just to avoid permission issues) 
     60        backupfile = 'shbckp-%s.log' % os.getuid() 
     61        self.backupdest = os.path.join(directory, backupfile) 
    5562 
    56             try: 
    57                 logging.basicConfig( 
    58                     level=logging.DEBUG, 
    59                     format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
    60                     datefmt='%Y-%m-%d %H:%M:%S', 
    61                     filename=self.logdest, 
    62                     filemode='w' 
    63                 ) 
    64             except IOError: 
    65                 logging.warning("Cannot log to disc, path %s not writable! " 
    66                              "Logging everything to console." % dir) 
     63        try: 
     64            logging.basicConfig( 
     65                level=getattr(logging, level_file.upper()), 
     66                format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
     67                datefmt='%Y-%m-%d %H:%M:%S', 
     68                filename=self.logdest, 
     69                filemode='w' 
     70            ) 
     71        except IOError: 
     72            logging.warning("Cannot log to disc, path %s not writable! " 
     73                         "Logging everything to console." % directory) 
    6774 
    68                 logging.basicConfig( 
    69                     level=logging.DEBUG, 
    70                     format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
    71                     datefmt='%Y-%m-%d %H:%M:%S' 
    72                 ) 
    73             else: 
    74                 # additional to console 
    75                 console = logging.StreamHandler() 
    76                 console.setLevel(logging.ERROR) 
    77                 #console.setLevel(logging.DEBUG) 
     75            logging.basicConfig( 
     76                level=getattr(logging, level_file.upper()), 
     77                format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
     78                datefmt='%Y-%m-%d %H:%M:%S' 
     79            ) 
     80        else: 
     81            # additional to console 
     82            console = logging.StreamHandler() 
     83            console.setLevel(getattr(logging, level_screen.upper())) 
     84            #console.setLevel(logging.DEBUG) 
    7885 
    79                 # set a format which is simpler for console use 
    80                 formatter = \ 
    81                     logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
     86            # set a format which is simpler for console use 
     87            formatter = \ 
     88                logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
    8289 
    83                 # tell the handler to use this format 
    84                 console.setFormatter(formatter) 
     90            # tell the handler to use this format 
     91            console.setFormatter(formatter) 
    8592 
    86                 # add the handler to the root logger 
    87                 logging.getLogger('').addHandler(console) 
     93            # add the handler to the root logger 
     94            logging.getLogger('').addHandler(console) 
    8895 
    89             self.logging = logging 
     96        self.logging = logging 
    9097 
    91             atexit.register(self.shutdown) 
     98        atexit.register(self.shutdown) 
    9299 
    93100    def shutdown(self): 
     
    100107            os.rename(self.logdest, self.backupdest) 
    101108        except Exception, e: 
    102             pass 
    103 #            print e 
     109            warnings.warn("Error while shutting down logging: %s" % e) 
    104110 
    105111    def newLogger(self, name): 
     
    110116        return logging.getLogger(name) 
    111117 
    112 # init logging once (sets logfile, etc) 
    113 Logging() 
     118if __name__ == "__main__": 
     119    a = Logging().newLogger("test") 
     120    a.info("info") 
     121    a.error("error") 
     122    a.debug("debug") 
  • SHX/trunk/src/SeismicHandler/modules/runtime.py

    r269 r270  
    2222""" 
    2323 
     24# Please note that in this file no logging takes place since configuration 
     25# options for logging are initialized here first. 
     26 
    2427import sys 
    2528import os 
     
    4043     
    4144    Now a file named TEST should contain 
    42     >>> open("TEST").read()[:34] 
    43     "<open file 'TEST', mode 'ab' at 0x" 
     45    >>> open("TEST").read() #doctest: +ELLIPSIS 
     46    "<open file 'TEST', mode 'ab' at 0x..." 
    4447 
    4548    This is only for clean-up: 
     
    5356     
    5457    # configuration is read from file 
    55     __configuration = None 
     58    config = None 
    5659 
    5760    # global switches (see http://www.seismic-handler.org/portal/wiki/ShSwitch) 
     
    7982 
    8083    def __init__(self): 
    81         if not self.__configuration: 
     84        if not self.config: 
    8285            self.readConfig() 
    8386 
     
    167170                    # check for variable definition 
    168171                    if i[0].startswith("$"): 
    169                         vars[i[0].lower()] = __handlePlaceholdersVars(i[1]) 
     172                        v = i[0].lower() 
     173                        if v in vars: 
     174                            warnings.warn("Variable '%s' defined more " 
     175                                          "than once!" % v, SyntaxWarning) 
     176 
     177                        vars[v] = __handlePlaceholdersVars(i[1]) 
    170178                    else: 
    171179                        conf[s][i[0]] = __handlePlaceholdersVars(i[1]) 
    172180 
    173                 # check for include statement 
     181                # check if include statement was defined -> process last 
    174182                if "include" in conf[s]: 
    175183 
     
    181189                        # only include current section 
    182190                        if not extra.has_section(s): 
     191                            warnings.warn("To be included configuration file " 
     192                                          "'%s' not found." % e, SyntaxWarning) 
    183193                            break 
    184194 
     
    196206                conf[s][i] = __handlePlaceholdersVars(conf[s][i], True) 
    197207                 
    198         self.__configuration = conf 
     208        self.config = conf 
    199209        self.__fullconfig = fullconfig 
    200210 
  • SHX/trunk/src/SeismicHandler/shx.conf

    r268 r270  
    1414stations = [SHX]/stations/,[PRIVATE]/stations/,/mnt/stations/ 
    1515 
     16[logging] 
     17# possible values: debug, info, error, XXX 
     18level_file = debug 
     19level_screen = error 
     20 
    1621[miniseed] 
    17 backend = szgrf 
     22backend = bgrszo,sfd 
     23 
     24[bgrszo] 
     25host = 192.168.11.151 
     26db = sfdb 
     27use_credentials = no 
     28user = 
     29password = 
     30 
     31[sfd] 
     32default_path = . 
    1833 
    1934[graphics] 
     
    2843# If the included configuration file is not found, the error will be 
    2944# passed silently. 
     45 
     46[layout] 
     47# You are able to define variables. All definitions are globally no 
     48# matter where they are defined. Substitution will be done as last step 
     49# while processing the configuration file. 
     50$grsn = WET,FUR,BSEG 
     51$grf = GRA1 
     52read01 = MOX,$grsn,$grf 
Note: See TracChangeset for help on using the changeset viewer.