跳到主要内容

如何实现Python日志输出到文件 ?

参考答案:

在Python中,我们可以使用内置的logging模块来将日志输出到文件。以下是一个简单的示例:

import logging

# 创建一个logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('my_log_file.log')
fh.setLevel(logging.DEBUG)

# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)

# 记录一条日志
logger.info('This is a log info')
logger.debug('Debugging')
logger.warning('Warning exists')
logger.info('Finish')

在这个例子中,我们首先创建了一个logger对象,并设置了它的日志级别为DEBUG。然后,我们创建了两个handler:一个是FileHandler,它将日志写入到名为my_log_file.log的文件中;另一个是StreamHandler,它将日志输出到控制台。我们还定义了日志的输出格式,并设置给这两个handler。最后,我们将这两个handler添加到logger中,并使用logger记录了几条日志。

运行这段代码后,你会在控制台看到输出的日志,同时在你的工作目录下会生成一个名为my_log_file.log的文件,其中也包含了这些日志。

注意,FileHandlerStreamHandler都可以设置不同的日志级别。在这个例子中,我们设置的都是DEBUG,这意味着所有级别为DEBUG及以上的日志都会被记录。如果你想要记录更高级别的日志(例如只记录WARNINGERROR),你可以调整这些handler的日志级别。

此外,当你不再需要logger时,应该调用logger.removeHandler(handler)方法来移除handler,并调用handler.close()方法来关闭handler,以避免资源泄漏。