输出日志信息到文件,同时输出错误信息到控制台
源代码如下:
import logging
#配置 logging
logger=logging.getLogger(__name__)
logger.setLevel(level=logging.DEBUG)
handler=logging.FileHandler("logging_console_file.txt")
handler.setLevel(logging.DEBUG)
formatter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
handler.setFormatter(formatter)
console =logging.StreamHandler()
console.setLevel(logging.ERROR)
logger.addHandler(handler)
logger.addHandler(console)
1.导入logging模块:
import logging
这行代码导入了Python的内置logging
模块,该模块提供了灵活的日志记录系统。
2.获取或创建logger:
logger=logging.getLogger(__name__)
使用getLogger
函数并传入__name__
(通常是当前模块的名字)来获取或创建一个logger。这样,如果在其他模块中也使用了logging.getLogger(__name__)
,并且两个模块有不同的__name__
,则它们将获得两个不同的logger。
3. 设置logger的级别:
logger.setLevel(level=logging.DEBUG)
这行代码设置了logger的级别为DEBUG
。这意味着所有级别为DEBUG
及以上的日志(如INFO
、WARNING
、ERROR
、CRITICAL
)都将被处理。
4. 创建文件处理器:
handler=logging.FileHandler("logging_console_file.txt")
使用FileHandler
类创建一个文件处理器,它将日志信息写入名为logging_console_file.txt
的文件中。
5. 设置文件处理器的级别:
handler.setLevel(logging.DEBUG)
这行代码设置了文件处理器的级别为DEBUG
,意味着所有级别为DEBUG
及以上的日志都将被写入文件。
6. 创建日志格式器:
formatter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
使用Formatter
类创建了一个格式器,该格式器定义了日志信息的输出格式。在这个例子中,日志信息将包括时间戳、logger名称、日志级别和日志消息。
7. 将格式器应用到文件处理器:
handler.setFormatter(formatter)
这行代码将之前创建的格式器应用到文件处理器上,确保文件处理器按照指定的格式输出日志。
8. 创建控制台处理器:
console =logging.StreamHandler()
使用StreamHandler
类创建一个控制台处理器,它将日志信息输出到控制台(通常是终端或命令提示符)。
9. 设置控制台处理器的级别:
console.setLevel(logging.ERROR)
这行代码设置了控制台处理器的级别为ERROR
,意味着只有级别为ERROR
及以上的日志才会被输出到控制台。
10. 为logger添加处理器:
logger.addHandler(handler)
logger.addHandler(console)
这两行代码将之前创建的文件处理器和控制台处理器都添加到了logger上。这样,当使用logger记录日志时,日志信息将同时被写入文件和输出到控制台。但是,由于两个处理器的级别设置不同,所以只有级别为DEBUG
及以上的日志会被写入文件,而只有级别为ERROR
及以上的日志会被输出到控制台。
运行结果:
错误信息
严重错误