要在脚本中间更改日志记录级别

时间:2018-05-10 04:10:26

标签: python python-2.7

我有一个继续运行的应用程序,应用程序不会被停止,当客户端没有指令时它会空闲,并且监听外部事件并在用户输入任何指令时做出反应在任何时候

有一个配置文件可以在应用程序运行时更改,并且日志记录级别就是其中之一。 myLoggingLevel是下面的参数。

在应用程序运行时是否还要更改日志记录级别? 我使用ConfigParser.RawConfigParser()进行配置更改。

import time
import logging
import datetime

def getLogger(loggerName='myLoggerName', logLevel='INFO', log_path='C:/logs/'):
    class Formatter(logging.Formatter):
        def formatTime(self, record, datefmt=None):
            return (datetime.datetime.utcnow()).strftime('%H:%M:%S')
    logLevel = logLevel.upper()
    levels = {'DEBUG'   : logging.DEBUG,
            'INFO'      : logging.INFO,
            'WARNING'   : logging.WARNING,
            'ERROR'     : logging.ERROR,
            'CRITICAL'  : logging.CRITICAL}
    today = datetime.datetime.utcnow().strftime('%Y-%m-%d')
    full_log_path = log_path + '%s.%s.log' % (loggerName, today)
    logger = logging.getLogger(loggerName+'.'+today)
    if not len(logger.handlers):
        logger.setLevel(levels[logLevel])
        fh = logging.FileHandler(full_log_path)
        formatter = Formatter('%(asctime)s.%(msecs)03d | %(message)s', datefmt='%H:%M:%S')
        fh.setFormatter(formatter)
        logger.addHandler(fh)
        ch = logging.StreamHandler()
        ch.setLevel(logging.ERROR)
        ch.setFormatter(formatter)
        logger.addHandler(ch)
        logger.propagate = False
        logger.info('loggerName: %s' % loggerName)
    return logger

def run(myLoggingLevel):
    while True:
        log = getLogger(loggerName='testLogLevel', logLevel=myLoggingLevel)
        log.debug('I am in debug')
        log.info('I am in info')
        time.sleep(3)

run(myLoggingLevel='debug')

1 个答案:

答案 0 :(得分:0)

最后我做了一个函数,在超时或事件上运行它,例如单击按钮以修改日志记录级别。