python的log使用详解

本文介绍了如何使用Python标准库中的logging模块来进行日志记录,并通过一个具体的例子展示了如何配置日志输出格式、级别以及文件。此外,还演示了如何通过配置文件来管理复杂的日志配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import logging

logger = logging.getLogger() # 生成一个日志对象

# logfile是一个全局变量,它就是一个文件名,如:'crawl.log'
logfile = 'test.log'


# 生成一个Handler。logging支持许多Handler,
# 象FileHandler, SocketHandler, SMTPHandler等,我由于要写
# 文件就使用了FileHandler。
hdlr = logging.FileHandler('sendlog.txt')


# 成一个格式器,用于规范日志的输出格式。如果没有这行代码,那么缺省的
# 格式就是:"%(message)s"。也就是写日志时,信息是什么日志中就是什么,
# 没有日期,没有信息级别等信息。logging支持许多种替换值,详细请看
# Formatter的文档说明。这里有三项:时间,信息级别,日志信息
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')


# 将格式器设置到处理器上
hdlr.setFormatter(formatter)


# 将处理器加到日志对象上
logger.addHandler(hdlr)


# 设置日志信息输出的级别。logging提供多种级别的日志信息,如:NOTSET,
# DEBUG, INFO, WARNING, ERROR, CRITICAL等。每个级别都对应一个数值。
# 如果不执行此句,缺省为30(WARNING)。可以执行:logging.getLevelName
# (logger.getEffectiveLevel())来查看缺省的日志级别。日志对象对于不同
# 的级别信息提供不同的函数进行输出,如:info(), error(), debug()等。当
# 写入日志时,小于指定级别的信息将被忽略。因此为了输出想要的日志级别一定
# 要设置好此参数。这里我设为NOTSET(值为0),也就是想输出所有信息
logger.setLevel(logging.NOTSET)

实际运用中,我们可能需要将日志的配置信息独立出来,这时候我们就需要用到logging的另一个功能:

test.py

# test.py
import logging
import logging.config

logging.config.fileConfig("logging.conf")

#create logger
logger = logging.getLogger("example")

#"application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

logHello = logging.getLogger("hello")
logHello.info("Hello world!")


logging.conf配置文件:

# logging.conf

[loggers]
keys=root,example

[handlers]
keys=consoleHandler,rotateFileHandler

[formatters]
keys=simpleFormatter

[formatter_simpleFormatter]
format=[%(asctime)s](%(levelname)s)%(name)s : %(message)s

[logger_root]
level=DEBUG
handlers=consoleHandler,rotateFileHandler

[logger_example]
level=DEBUG
handlers=consoleHandler,rotateFileHandler
qualname=example
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_rotateFileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('test.log', 'a', 200000, 9)


Python中的Log类是用来记录程序运行时的信息的。它可以帮助我们追踪程序运行的状态,查找问题,优化程序等。 在Python中,Log类主要由以下几个部分组成: 1. Logger:日志记录器,用来记录日志信息。 2. Handler:处理器,用来处理日志信息,比如将日志信息输出到控制台或文件中。 3. Formatter:格式化器,用来定义日志信息的格式。 下面详细介绍一下Log类的使用: 1. 创建Logger对象 我们可以通过以下代码创建一个Logger对象: ```python import logging logger = logging.getLogger('my_logger') ``` 其中,'my_logger'是Logger对象的名称,可以自定义。 2. 设置Logger的级别 Logger对象有5个级别,分别是DEBUG、INFO、WARNING、ERROR、CRITICAL。我们可以通过以下代码设置Logger的级别: ```python logger.setLevel(logging.DEBUG) ``` 这里将日志级别设置为DEBUG,表示只有DEBUG级别及以上的日志信息才会被记录。 3. 创建Handler对象 我们可以通过以下代码创建一个Handler对象: ```python console_handler = logging.StreamHandler() ``` 这里创建了一个StreamHandler对象,表示将日志信息输出到控制台。 4. 设置Handler的级别 和Logger一样,Handler也有5个级别,我们可以通过以下代码设置Handler的级别: ```python console_handler.setLevel(logging.DEBUG) ``` 这里将Handler的级别也设置为DEBUG。 5. 创建Formatter对象 我们可以通过以下代码创建一个Formatter对象: ```python formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ``` 这里创建了一个格式化器对象,定义了日志信息的格式。 6. 将Formatter对象添加到Handler对象中 我们可以通过以下代码将格式化器对象添加到Handler对象中: ```python console_handler.setFormatter(formatter) ``` 这样,日志信息就会按照我们定义的格式输出到控制台。 7. 将Handler对象添加到Logger对象中 我们可以通过以下代码将Handler对象添加到Logger对象中: ```python logger.addHandler(console_handler) ``` 这样,Logger对象就会将日志信息交给Handler对象处理,进而输出到控制台。 8. 记录日志信息 我们可以通过以下代码记录日志信息: ```python logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 这里分别记录了5个级别的日志信息。 总结一下,Log类的使用包括以下几个步骤: 1. 创建Logger对象。 2. 设置Logger的级别。 3. 创建Handler对象。 4. 设置Handler的级别。 5. 创建Formatter对象。 6. 将Formatter对象添加到Handler对象中。 7. 将Handler对象添加到Logger对象中。 8. 记录日志信息。 通过这些步骤,我们可以轻松地记录程序运行时的信息,方便调试和优化程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值