# GeneNetwork logger
#
# The standard python logging module is very good. This logger adds a
# few facilities on top of that. Main one being that it picks up
# settings for log levels (global and by module) and (potentially)
# offers some fine grained log levels for the standard levels.
#
# All behaviour is defined here.  Global settings (defined in
# default_settings.py).
#
# To use logging and settings put this at the top of a module:
#
#   import utility.logger
#   logger = utility.logger.getLogger(__name__ )
#
# To override global behaviour set the LOG_LEVEL in default_settings.py
# or use an environment variable, e.g.
#
#    env LOG_LEVEL=INFO ./bin/genenetwork2
#
# To override log level for a module replace that with, for example,
#
#   import logging
#   import utility.logger
#   logger = utility.logger.getLogger(__name__,level=logging.DEBUG)
#
# We'll add more overrides soon.

import logging
import string
from utility.tools import LOG_LEVEL

class GNLogger:
    """A stub for multiple parameter logging"""

    def __init__(self,name):
        self.logger = logging.getLogger(name)

    def setLevel(self,value):
        self.logger.setLevel(value)

    def debug(self,*args):
        self.collect(self.logger.debug,*args)

    def info(self,*args):
        self.collect(self.logger.info,*args)

    def warning(self,*args):
        self.collect(self.logger.warning,*args)
        self.logger.warning(self.collect(*args))

    def error(self,*args):
        self.collect(self.logger.error,*args)

    def collect(self,fun,*args):
        for a in args:
            fun(a)

# Get the module logger. You can override log levels at the
# module level
def getLogger(name, level = None):
    gnlogger = GNLogger(name)
    logger = gnlogger.logger

    if level:
        logger.setLevel(level)
    else:
        logger.setLevel(LOG_LEVEL)

    logger.info("Log level of "+name+" set to "+logging.getLevelName(logger.getEffectiveLevel()))
    return gnlogger