Changeset 442 for trunk/src/__init__.py

Show
Ignore:
Timestamp:
11/11/09 17:02:19 (3 years ago)
Author:
apdavison
Message:

Some tweaks to the init_logging() function and other logging-related stuff. Perhaps this should be moved out of NeuroTools/__init__.py into its own module?

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/__init__.py

    r441 r442  
    3939__version__ = "0.1.0 (Asynchronous Astrocyte)" 
    4040import warnings 
     41from operator import __or__ 
    4142 
    4243######################################################### 
     
    126127 
    127128# Add a header() level to logging 
    128 logging.HEADER = 60 
     129logging.HEADER = (logging.WARNING + logging.ERROR)/2 # higher than warning, lower than error 
    129130logging.addLevelName(logging.HEADER, 'HEADER') 
    130131 
     
    168169    } 
    169170     
    170     def __init__(self, fmt=None, datefmt=None, colours=DEFAULT_COLOURS): 
     171    def __init__(self, fmt=None, datefmt=None, colours=DEFAULT_COLOURS, mpi_rank=None): 
    171172        logging.Formatter.__init__(self, fmt, datefmt) 
    172173        self._colours = colours 
    173174        self._indents = FancyFormatter.DEFAULT_INDENTS 
     175        if mpi_rank is None: 
     176            self.prefix = "" 
     177        else: 
     178            self.prefix = "%-3d" % mpi_rank 
    174179     
    175180    def format(self, record): 
     
    179184        if self._colours: 
    180185            s = colour(self._colours[record.levelname], s) 
    181         return self._indents[record.levelname] + s 
     186        return self.prefix + self._indents[record.levelname] + s 
    182187 
    183188 
    184189class NameOrLevelFilter(logging.Filter): 
    185190    """ 
    186     Logging filter which allows messages that either meet the same name criteria 
    187     as the base filter class, or have a level >= the level specified. 
     191    Logging filter which allows messages that either have an approved name, or 
     192    have a level >= the level specified. 
    188193     
    189194    The intended use is when you want to receive most messages at a high level, 
     
    191196    particular component. 
    192197    """ 
    193     def __init__(self, name='', level=logging.INFO): 
    194         self.name = name 
    195         self.nlen = len(name) 
     198    def __init__(self, names=[], level=logging.INFO): 
     199        self.names = names 
    196200        self.level = level 
    197201         
    198202    def filter(self, record): 
    199         allow_by_name = logging.Filter.filter(self, record) 
     203        if len(self.names) == 0: 
     204            allow_by_name = True 
     205        else: 
     206            allow_by_name = record.name in self.names 
    200207        allow_by_level = record.levelno >= self.level 
    201208        return (allow_by_name or allow_by_level) 
    202      
    203  
    204 def init_logging(filename, file_level=logging.INFO, console_level=logging.WARNING): 
     209 
     210 
     211def init_logging(filename, file_level=logging.INFO, console_level=logging.WARNING, mpi_rank=None): 
     212    if mpi_rank is None: 
     213        mpi_fmt = "" 
     214    else: 
     215        mpi_fmt = "%3d " % mpi_rank 
    205216    logging.basicConfig(level=file_level, 
    206                         format='%(asctime)s %(name)-10s %(levelname)-6s %(message)s [%(pathname)s:%(lineno)d]', 
     217                        format='%%(asctime)s %s%%(name)-10s %%(levelname)-6s %%(message)s [%%(pathname)s:%%(lineno)d]' % mpi_fmt, 
    207218                        filename=filename, 
    208219                        filemode='w') 
    209220    console = logging.StreamHandler() 
    210221    console.setLevel(console_level) 
    211     console.setFormatter(FancyFormatter('%(message)s')) 
     222    console.setFormatter(FancyFormatter('%(message)s', mpi_rank=mpi_rank)) 
    212223    logging.getLogger('').addHandler(console) 
    213224    return console