当我们编写Python程序时,经常需要记录程序的运行状态、异常情况等信息。为此,我们可以使用logging模块进行日志输出和记录。logging模块提供了灵活的日志级别、输出格式和输出位置的配置方式,能够满足我们不同应用场景中的需求。
本文将讲解如何使用Python logging模块,实现将日志信息同时输出到屏幕和写入日志文件的功能。
步骤一:导入logging模块
要使用logging模块,我们需要先导入它:
import logging
步骤二:配置logging
配置logging模块,需要使用logging模块提供的各种方法设置。下面是几个常用的方法:
- logging.basicConfig
这是logging模块中的一个基础配置方法,用于配置日志的基本设置,如日志级别、输出格式、输出位置等。这个方法只需要在程序入口处调用一次,即可全局有效。
下面是一个基本示例:
python
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
filename='example.log',
filemode='w')
上述代码表示设置日志级别为DEBUG,输出格式为时间、日志级别、日志内容,将日志记录到文件example.log中,使用w模式清空文件并写入。
- logging.getLogger
getLogger方法用于获取日志记录器,我们可以给具体模块或功能区域创建一个日志记录器。如果不传入参数,则返回root日志记录器。
下面是一个示例:
python
logger = logging.getLogger('mylogger')
步骤三:输出日志信息
调用logging模块的相关方法,即可输出日志信息。logging模块中常用的方法有以下几种:
- logging.debug(msg, args, *kwargs):输出DEBUG级别的日志记录。
- logging.info(msg, args, *kwargs):输出INFO级别的日志记录。
- logging.warning(msg, args, *kwargs):输出WARNING级别的日志记录。
- logging.error(msg, args, *kwargs):输出ERROR级别的日志记录。
- logging.critical(msg, args, *kwargs):输出CRITICAL级别的日志记录。
下面是一个输出日志信息的示例:
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
上述代码中,我们分别使用不同级别的日志函数打印了不同级别的日志信息。
步骤四:将日志输出同时写入文件
要将日志信息同时输出到屏幕和写入日志文件,可以同时调用logging.StreamHandler
和logging.FileHandler
方法。
# 创建FileHandler,并设置日志级别和日志文件路径
fh = logging.FileHandler('example.log')
fh.setLevel(logging.DEBUG)
# 定义输出到屏幕的handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 设置输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# 定义日志记录器,并将以上两者添加到记录器中
logger = logging.getLogger('mylogger')
logger.addHandler(ch)
logger.addHandler(fh)
上述代码中,我们分别创建了一个FileHandler
和一个StreamHandler
,并设置了级别和输出格式。然后定义了一个日志记录器,并将前面创建的两个handler都添加到记录器中。
接下来,我们再次使用之前的代码输出不同级别的日志。此时,日志信息将同时输出到屏幕和example.log文件中。
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
示例说明
示例一
下面是一个完整的示例代码:
import logging
# 基础配置logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
filename='example.log',
filemode='w')
# 创建FileHandler,并设置日志级别和日志文件路径
fh = logging.FileHandler('example.log')
fh.setLevel(logging.DEBUG)
# 定义输出到屏幕的handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 设置输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# 定义日志记录器,并将以上两者添加到记录器中
logger = logging.getLogger('mylogger')
logger.addHandler(ch)
logger.addHandler(fh)
# 输出不同级别的日志信息
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
上述代码中,我们使用basicConfig
方法配置了logging基础设置,也同时使用了FileHandler
和StreamHandler
方法将日志写入文件和输出到屏幕。
示例二
下面是另一个利用logging输出同时写入文件的示例:
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
logger.info('creating an instance of my_module.MyClass')
logger.debug('debugging')
logger.warning('warning message')
该示例中,我们同样使用了FileHandler
和StreamHandler
方法将日志写入文件和输出到屏幕,并使用了getLogger
方法获取日志记录器。
总结
以上是Python logging输出到屏幕并将日志写入文件的完整攻略。我们首先需要导入logging模块,其次配置logging模块,设置日志级别、输出格式和输出位置等,最后输出日志信息。
为了将日志信息同时输出到屏幕和写入文件,我们需要同时调用logging.StreamHandler
和logging.FileHandler
方法,并将它们添加到日志记录器中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+logging输出到屏幕将log日志写入文件 - Python技术站