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

2024-10-03 19:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有一个可以在应用程序运行时更改的配置文件,日志记录级别就是其中之一。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')

Tags: pathimportinfologdatetimeformatterloggingdef
2条回答

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

为了在执行过程中更改日志记录级别,可以删除日志记录程序,并根据配置文件中的新规范创建一个新的日志记录程序。例如,您可以创建自己的监视程序来跟踪配置文件是否已更改,并根据建议相应地更新记录器级别。或者您可以通过threading.Event为其创建一个事件。您可能想看看threading模块。你知道吗

相关问题 更多 >