Changeset 5975

Show
Ignore:
Timestamp:
09/05/2010 10:23:48 AM (1 year ago)
Author:
ed
Message:

Updated the logging changes to not attempt to create any file-based logs. This should fix some of the problems reported on Windows.

Changed the dbActivityLog to mirror the mainLog: it has provisions for both a console and a file-based handler. This will allow you to better control db activity logging.

Renamed the log handlers to include 'Handler' in their name. I think that it is much more clear that 'consoleLogHandler' is a handler; the old name of 'consoleLog' would lead one to believe it is the log itself.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dabo/__init__.py

    r5962 r5975  
    128128from settings import * 
    129129 
     130# These are the various standard log handlers. 
     131consoleLogHandler = fileLogHandler = None 
     132dbConsoleLogHandler = dbFileLogHandler = None 
    130133# See if a logging.conf file exists in either the current directory or 
    131134# the base directory for the dabo module. If such a file is found, use 
     
    139142    _logConfFile = os.path.join(_daboloc, _logConfFileName) 
    140143if os.path.exists(_logConfFile): 
     144    # If a 'logging.conf' file exists, use it instead of dabo.settings. 
    141145    import logging.config 
    142146    logging.config.fileConfig(_logConfFile) 
     
    144148    log = logging.getLogger(mainLogQualName) 
    145149    dbActivityLog = logging.getLogger(dbLogQualName) 
    146     consoleLog = fileLog = dbLog = None 
    147150    for _handler in log.handlers: 
    148151        try: 
    149152            _handler.baseFilename 
    150             fileLog = _handler 
     153            fileLogHandler = _handler 
    151154        except AttributeError: 
    152             consoleLog = _handler 
     155            consoleLogHandler = _handler 
    153156    for _handler in dbActivityLog.handlers: 
    154157        try: 
    155158            _handler.baseFilename 
    156             dbLog = _handler 
     159            dbFileLogHandler = _handler 
    157160            break 
    158161        except AttributeError: 
    159             pass 
     162            dbConsoleLogHandler = _handler 
    160163else: 
    161164    # Use dabo.settings values to configure the logs 
    162     consoleLog = logging.StreamHandler() 
    163     consoleLog.setLevel(mainLogConsoleLevel) 
    164     fileLog = logging.handlers.RotatingFileHandler(filename=mainLogFile, maxBytes=maxLogFileSize, 
    165             encoding=defaultEncoding) 
    166     fileLog.setLevel(mainLogFileLevel) 
     165    consoleLogHandler = logging.StreamHandler() 
     166    consoleLogHandler.setLevel(mainLogConsoleLevel) 
    167167    consoleFormatter = logging.Formatter(consoleFormat) 
    168168    consoleFormatter.datefmt = mainLogDateFormat 
    169     fileFormatter = logging.Formatter(fileFormat) 
    170     fileFormatter.datefmt = mainLogDateFormat 
    171     consoleLog.setFormatter(consoleFormatter) 
    172     fileLog.setFormatter(fileFormatter) 
     169    consoleLogHandler.setFormatter(consoleFormatter) 
    173170    log = logging.getLogger(mainLogQualName) 
    174171    log.setLevel(logging.DEBUG) 
    175     log.addHandler(consoleLog) 
    176     log.addHandler(fileLog) 
     172    log.addHandler(consoleLogHandler) 
     173    if mainLogFile is not None: 
     174        fileLogHandler = logging.handlers.RotatingFileHandler(filename=mainLogFile, 
     175                maxBytes=maxLogFileSize, encoding=defaultEncoding) 
     176        fileLogHandler.setLevel(mainLogFileLevel) 
     177        fileFormatter = logging.Formatter(fileFormat) 
     178        fileFormatter.datefmt = mainLogDateFormat 
     179        fileLogHandler.setFormatter(fileFormatter) 
     180        log.addHandler(fileLogHandler) 
    177181     
     182    dbConsoleLogHandler = logging.StreamHandler() 
     183    dbConsoleLogHandler.setLevel(dbLogConsoleLevel) 
     184    dbConsoleFormatter = logging.Formatter(dbConsoleFormat) 
     185    dbConsoleFormatter.datefmt = dbLogDateFormat 
     186    dbConsoleLogHandler.setFormatter(dbConsoleFormatter) 
    178187    dbActivityLog = logging.getLogger(dbLogQualName) 
    179     dbLog = logging.handlers.RotatingFileHandler(filename=dbLogFile, maxBytes=maxLogFileSize, 
    180             encoding=defaultEncoding) 
    181     dbActivityLog.addHandler(dbLog) 
    182     dbActivityLog.setLevel(dbLogFileLevel) 
    183     dbLog.setLevel(dbLogFileLevel) 
    184  
    185  
    186 ######################################################## 
    187 #### The commented out code was a first attempt at using Python logging, but with 
    188 #### the dabo.settings file being used to configure instead of logging.conf 
    189 ######################################################## 
    190 ######################################################## 
     188    dbActivityLog.setLevel(dbLogLevel) 
     189    dbActivityLog.addHandler(dbConsoleLogHandler) 
     190    if dbLogFile is not None: 
     191        dbFileLogHandler = logging.handlers.RotatingFileHandler(filename=dbLogFile, 
     192                maxBytes=maxLogFileSize, encoding=defaultEncoding) 
     193        dbFileLogHandler.setLevel(dbLogFileLevel) 
     194        dbFileFormatter = logging.Formatter(dbFileFormat) 
     195        dbFileFormatter.datefmt = dbLogDateFormat 
     196        dbFileLogHandler.setFormatter(dbFileFormatter) 
     197        dbActivityLog.addHandler(dbFileLogHandler) 
     198 
     199 
     200def setMainLogFile(fname, level=None): 
     201    """Create the main file-based logger for the framework, and optionally 
     202    set the log level. If the passed 'fname' is None, any existing file-based 
     203    logger will be closed. 
     204    """ 
     205    if fname is None: 
     206        if dabo.fileLogHandler: 
     207            # Remove the existing handler 
     208            dabo.log.removeHandler(dabo.fileLogHandler) 
     209            dabo.fileLogHandler.close() 
     210            dabo.fileLogHandler = None 
     211    else: 
     212        if dabo.fileLogHandler: 
     213            # Close the existing handler first 
     214            dabo.log.removeHandler(dabo.fileLogHandler) 
     215            dabo.fileLogHandler.close() 
     216            dabo.fileLogHandler = None 
     217        dabo.fileLogHandler = logging.handlers.RotatingFileHandler(filename=fname, 
     218                maxBytes=dabo.maxLogFileSize, encoding=dabo.defaultEncoding) 
     219        if level: 
     220            dabo.fileLogHandler.setLevel(level) 
     221        else: 
     222            dabo.fileLogHandler.setLevel(dabo.mainLogFileLevel) 
     223        dabo.fileFormatter = logging.Formatter(dabo.fileFormat) 
     224        dabo.fileFormatter.datefmt = dabo.mainLogDateFormat 
     225        dabo.fileLogHandler.setFormatter(dabo.fileFormatter) 
     226        dabo.log.addHandler(dabo.fileLogHandler) 
     227 
     228 
     229def setDbLogFile(fname, level=None): 
     230    """Create the dbActivity file-based logger for the framework, and optionally 
     231    set the log level. If the passed 'fname' is None, any existing file-based 
     232    logger will be closed. 
     233    """ 
     234    if fname is None: 
     235        if dabo.dbFileLogHandler: 
     236            # Remove the existing handler 
     237            dabo.dbActivityLog.removeHandler(dabo.dbFileLogHandler) 
     238            dabo.dbFileLogHandler.close() 
     239            dabo.dbFileLogHandler = None 
     240    else: 
     241        if dabo.dbFileLogHandler: 
     242            # Close the existing handler first 
     243            dabo.dbActivityLog.removeHandler(dabo.dbFileLogHandler) 
     244            dabo.dbFileLogHandler.close() 
     245            dabo.dbFileLogHandler = None 
     246        dabo.dbFileLogHandler = logging.handlers.RotatingFileHandler(filename=fname, 
     247                maxBytes=dabo.maxLogFileSize, encoding=dabo.defaultEncoding) 
     248        if level: 
     249            dabo.dbFileLogHandler.setLevel(level) 
     250        else: 
     251            dabo.dbFileLogHandler.setLevel(dabo.mainLogFileLevel) 
     252        dabo.dbFileFormatter = logging.Formatter(dabo.dbFileFormat) 
     253        dabo.dbFileFormatter.datefmt = dabo.dbLogDateFormat 
     254        dabo.dbFileLogHandler.setFormatter(dabo.dbFileFormatter) 
     255        dabo.dbActivityLog.addHandler(dabo.dbFileLogHandler) 
     256 
    191257 
    192258# Install localization service for dabo. dApp will install localization service 
  • trunk/dabo/logging.conf.sample

    r5962 r5975  
     1 
    12[loggers] 
    23keys=root,daboLog,dbActivity 
    34 
    45[handlers] 
    5 keys=consoleHandler,fileHandler,dbHandler 
     6keys=consoleHandler,fileHandler,dbConsoleHandler,dbFileHandler 
    67 
    78[formatters] 
     
    2021[logger_dbActivity] 
    2122level=DEBUG 
    22 handlers=dbHandler 
     23handlers=dbConsoleHandler,dbFileHandler 
    2324qualname=dabo.dbActivityLog 
    2425propagate=0 
     
    3637args=("dabo.log", "a", 5242880, 7, "utf8") 
    3738 
    38 [handler_dbHandler] 
     39[handler_dbConsoleHandler] 
     40class=StreamHandler 
     41level=ERROR 
     42formatter=basicFormatter 
     43args=(sys.stdout, ) 
     44 
     45[handler_dbFileHandler] 
    3946class=handlers.RotatingFileHandler 
    4047level=DEBUG 
  • trunk/dabo/settings.py

    r5962 r5975  
    184184mainLogLevel = logging.DEBUG 
    185185mainLogQualName = "dabo.mainLog" 
    186 # Set the main log file to the null device initially 
    187 mainLogFile = os.devnull 
     186# Set the main log file to None initially 
     187mainLogFile = None 
    188188mainLogConsoleLevel = logging.ERROR 
    189189mainLogFileLevel = logging.ERROR 
    190190mainLogDateFormat = "%Y-%m-%d %H:%M:%S" 
    191 consoleFormat = "%(asctime)s - %(levelname)s - %(message)s" 
    192 fileFormat = "%(asctime)s - %(levelname)s - %(message)s" 
    193 # Set the db file to the null device initially 
    194 dbLogFile = os.devnull 
     191consoleFormat = fileFormat = "%(asctime)s - %(levelname)s - %(message)s" 
     192maxLogFileSize = 5242880        # 5 MB 
     193 
     194dbLogLevel = logging.DEBUG 
    195195dbLogQualName = "dabo.dbActivityLog" 
     196# Set the db file to None initially 
     197dbLogFile = None 
     198dbLogConsoleLevel = logging.ERROR 
    196199dbLogFileLevel = logging.DEBUG 
    197 maxLogFileSize = 5242880        # 5 MB 
     200dbLogDateFormat = "%Y-%m-%d %H:%M:%S" 
     201dbConsoleFormat = dbFileFormat = "%(asctime)s - %(levelname)s - %(message)s" 
     202dbMaxLogFileSize = 5242880      # 5 MB 
    198203 
    199204