登录 Python 脚本不起作用:导致日志文件为空

Rom*_*dgz 3 python logging

我有一个具有日志记录功能的脚本,但它停止工作(日志记录,而不是脚本)。我写了一个小例子来说明问题:

import logging
from os import remove
from os.path import exists


def setup_logger(logger_name, log_file, level=logging.WARNING):
    # Erase log if already exists
    if exists(log_file):
        remove(log_file)
    # Configure log file
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter('%(message)s')
    fileHandler = logging.FileHandler(log_file, mode='w')
    fileHandler.setFormatter(formatter)
    streamHandler = logging.StreamHandler()
    streamHandler.setFormatter(formatter)
    l.setLevel(level)
    l.addHandler(fileHandler)
    l.addHandler(streamHandler)


if __name__ == '__main__':
    setup_logger('log_pl', '/home/myuser/test.log')
    log_pl = logging.getLogger('log_pl')
    log_pl.info('TEST')
    log_pl.debug('TEST')
Run Code Online (Sandbox Code Playgroud)

在脚本的末尾,创建了文件 test.log,但它是空的。

我错过了什么?

bgp*_*ter 5

您的setup_logger函数指定了(默认)级别WARNING

def setup_logger(logger_name, log_file, level=logging.WARNING):
Run Code Online (Sandbox Code Playgroud)

...然后你记录了两个低于 的事件,WARNING它们应该被忽略:

log_pl.info('TEST')
log_pl.debug('TEST')
Run Code Online (Sandbox Code Playgroud)

如果您将调用setup_logger函数的代码更改为:

if __name__ == '__main__':
    setup_logger('log_pl', '/home/myuser/test.log', logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)

...我希望它能如你所愿。

请参阅Logging HOWTO 页面中的简单示例