记录

时间:2018-01-17 15:06:46

标签: python logging

我想在Python 3.6&amp ;;中创建一个日志文件。节省不同操作的时间。

所以我使用了这段代码:

def create_logger(logFile, fileLogLevel, streamLogLevel):
    # create logger for "Sample App"
    logger = logging.getLogger('Seller Explosion')
    logger.setLevel(logging.INFO)

    # create file handler which logs WARNING messages
    fh = logging.FileHandler(logFile, mode='w')
    fh.setLevel(fileLogLevel)

    # create console handler with a higher log level
    ch = logging.StreamHandler(stream=sys.stdout)
    ch.setLevel(streamLogLevel)

    # create formatter and add it to the handlers
    formatter = logging.Formatter('[%(asctime)s] %(levelname)8s --- %(message)s ' +
                                  '(%(filename)s:%(lineno)s)', datefmt='%Y-%m-%d %H:%M:%S')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)

    # add the handlers to the logger
    logger.addHandler(ch)
    logger.addHandler(fh)

    return logger

执行代码时我正在使用以下命令

logger = create_logger('<path to my folder>/TimeLog.log', logging.WARNING, logging.WARNING)
startTime=time.ctime()
logTime="Start Time for uploading: "+startTime
logger.info(logTime)

但是在走向我的路径时,我发现TimeLog.log是一个大小为0字节的空白文件。你能告诉我我在做什么错误吗?

1 个答案:

答案 0 :(得分:2)

您可以将处理程序设置为在vision级别进行过滤:

WARNING

logger = create_logger(..., logging.WARNING, logging.WARNING)

然后记录了fh.setLevel(fileLogLevel) # ... ch.setLevel(streamLogLevel) 级别的消息。 INFO是来自INFO较低不太严重级别,因此会被处理程序过滤掉。

您需要以WARNING级别或更高级别(WARNINGWARNINGERROR或数字值30及以上),将处理程序配置为处理较低级别(CRITICALINFODEBUG,或数字值为20或更低)。

例如,NOTSET会将数据添加到您的日志文件中。如果您使用logger.warn(logTime)作为logging.INFO的第二个参数,则create_logger()调用也会产生相同的效果。

来自Handler.setLevel() method documentation

  

将此处理程序的阈值设置为level。 将忽略不如级别严重的记录消息。创建处理程序时,级别设置为logger.info()(这将导致处理所有消息。

大胆强调我的;另请参阅Logging levels section了解其排序和数值。

请注意,在日志消息中创建带有时间戳的日志消息是相当多余的,因为您的日志格式已包含时间戳:

NOTSET