Python+logging输出到屏幕将log日志写入文件

yizhihongxing

当我们编写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.StreamHandlerlogging.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基础设置,也同时使用了FileHandlerStreamHandler方法将日志写入文件和输出到屏幕。

示例二

下面是另一个利用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')

该示例中,我们同样使用了FileHandlerStreamHandler方法将日志写入文件和输出到屏幕,并使用了getLogger方法获取日志记录器。

总结

以上是Python logging输出到屏幕并将日志写入文件的完整攻略。我们首先需要导入logging模块,其次配置logging模块,设置日志级别、输出格式和输出位置等,最后输出日志信息。

为了将日志信息同时输出到屏幕和写入文件,我们需要同时调用logging.StreamHandlerlogging.FileHandler方法,并将它们添加到日志记录器中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+logging输出到屏幕将log日志写入文件 - Python技术站

(1)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • 14个Python处理Excel的常用操作分享

    关于这篇“14个Python处理Excel的常用操作分享”的完整实例教程,我将为您详细讲解其内容和案例。整个教程中包含了14个Python处理Excel的常用操作,如读取Excel表格、写入Excel表格、格式化单元格、合并单元格、筛选数据等。接下来将从以下几个方面逐一介绍: 安装所需模块:在使用Python处理Excel文件前,必须先安装相应的模块。本篇教…

    python 2023年5月13日
    00
  • Python 打印不带括号的元组的实现

    以下是“Python 打印不带括号的元组的实现”完整攻略: 问题描述 在Python中,元组是由逗号隔开的一组值,通常使用圆括号表示。但有时候我们需要以不带圆括号的形式来打印元组。那么,如何实现这样的需求呢? 实现方式 方法一:使用“*”运算符 示例代码如下: tuple1 = (1, 2, 3, 4) print(*tuple1) 运行结果如下: 1 2 …

    python 2023年5月14日
    00
  • 网易游戏的面试题与参考答案记录

    网易游戏的面试题与参考答案记录攻略 背景 网易游戏是国内一家知名的游戏开发和发行公司,每年都有大量的求职者前来投递简历。而网易游戏在招聘过程中采用了一些非常有挑战性和特殊性的面试题。这些面试题不但可以考验面试者的编程能力和思维难度,也可以考查面试者的创新能力和解决问题能力。因此,对于想要应聘网易游戏或从事相关职业的求职者来说,了解和掌握这些面试题是非常重要的…

    python 2023年6月3日
    00
  • 详解Python 模拟实现单子

    Python 模拟实现单例的完整攻略可以分为以下几个步骤: 1. 确定单例模式的需求和作用 在开始实现之前,需要明确单例模式的作用和需求。单例模式的主要作用是确保一个类只有一个实例,这样的实例可以被多个线程或对象共享,从而实现资源利用的最大化和对象的统一管理。 2. 理解Python类的特点和继承关系 在开始具体实现之前,需要对Python类的特点有一定的理…

    python-answer 2023年3月25日
    00
  • OOP python – 从列表中删除类实例

    【问题标题】:OOP python – removing class instance from a listOOP python – 从列表中删除类实例 【发布时间】:2023-04-03 22:53:01 【问题描述】: 我有一个列表,用于保存由特定类创建的对象。 我想知道,因为我无法解决这个问题,如何从列表中删除该类的实例? 这应该基于知道对象的一个​…

    Python开发 2023年4月8日
    00
  • Python高级特性 切片 迭代解析

    Python高级特性切片迭代解析 Python是一种功能强大的编程语言,具有许多高级特性,包括切片、迭代等。本文将详细讲解Python高级特性切片和迭代的用法和解析。 切片 切片是指从序列中获取一部分元素的操作。Python中的序列包括字符串、列表、元组等。切片的语法如下: sequence[start:stop:step] 其中,start表示起始位置,s…

    python 2023年5月15日
    00
  • Python2.7.10以上pip更新及其他包的安装教程

    Python2.7.10以上pip更新及其他包的安装教程 1.更新pip到最新版本 在命令行中输入如下代码: pip install –upgrade pip 执行上述代码后,pip会自动下载并安装最新版本的pip。 2. 安装其他Python包 以安装numpy和pandas为例,执行以下代码: 安装numpy pip install numpy 安装p…

    python 2023年5月14日
    00
  • Tornado协程在python2.7如何返回值(实现方法)

    Tornado是一个高性能的Python Web框架,它支持协程(coroutines)并且基于回调(callbacks)。协程是一种轻量级线程,可用于提高Python中异步编程的效率。在Python 2.7中,Tornado中的协程可以通过两种方法来返回值。 使用tornado.gen.Return 在Python 2.7中,可以使用tornado.gen…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部