第10章:python自动化——logging日志库

目录

一、日志的基本应用

1.log日志的直接创建和使用

 2.traceback.format_exc()在日志的用法

二、日志的进阶使用

1.设置日志控制台输出

 2.设置日志文件中输出

三、配置文件设置与读取


一、日志的基本应用

1.log日志的直接创建和使用

在python运行过程中,我们经常使用print来作为输出的方式。包括在调试和查看代码运行情况的时候。在自动化运行时我们也不可能一直盯着电脑屏幕来看整体的运行。就需要有一个模块来专门记录整个运行过程,如果出现问题则直接记录下来。于是乎就有了日志的模块logging库。

logging库本身是Python自带的官方库之一。所以不需要下载直接调用就可以了。

'''
    Logging库的基本使用:
        1. 创建日志对象,进行设置,日志等级是需要根据实际情况自行设置的。
        2. 调用日志模块来实现日志的输出
        3. 选择将日志信息保存在文件之中
'''
# 导入logging库
import logging

from class09.logging_config import getLogger

# logging库的创建:设置日志的相关内容
logging.basicConfig(
    level=logging.DEBUG,  # 设置日志的输出默认等级,不设置的情况下,默认为warning等级
    #  设置日志的格式信息:asctime表示当前时间,levelname表示日志等级,filename表示运行的py文件名称,lineno表示行数,message表示输出信息
    format='%(asctime)s %(levelname)s %(filename)s %(lineno)s:%(message)s',
    filename='./logfile/log.log',  # 设置日志写入文件的保存文件名称及路径,加入此设置则会在运行时生成一个日志文件
    # 日志文件的内容写入,默认是以追加的方式来进行写入,也可以通过修改设置来改变写入的模式,一般不改
    # filemode='w'
)
# 日志输出不同等级的内容:debug < info < warning < error < critical
logging.debug('这是debug的内容')
logging.info('这是info的内容')
logging.warning('这是warning的内容')
logging.error('这是erro的内容')
logging.critical('这是critical的内容')

 输出效果如下:

 log.log日志文件的显示如下所示:

 2.traceback.format_exc()在日志的用法

import logging
import traceback

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(message)s %(filename)s %(lineno)s %(levelname)s',
    filemode='a',
    filename='./file/log.log'
)

logging.debug('这是debug的内容')
logging.info('这是info的内容')
logging.warning('这是warning的内容')
try:
    1/0
except:
    # traceback.format_exc()实现将异常信息写入日志文件中。便于出错后的调试。
    # format_exc是生成异常信息的字符串内容。可以print也可以写入文件。
    logging.error(traceback.format_exc())
logging.critical('这是critical的内容')

 在日志中的显示效果如下图所示:

二、日志的进阶使用

logging的运行都是基于4个组件来实现的。除去通过基本的调用以外,也可以直接调用组件来实现日志的记录
    1. logger:记录器,提供基本的能够被程序直接调用的接口
    2. handler:处理器,提供将记录器的内容发送到目的地的作用
    3. filter:过滤器,提供更好的粒度控制。
    4. formatter:格式化器,设置日志的所有内容的格式

1.设置日志控制台输出

设置方法如下:

import logging

# 通过logger创建一个记录器
logger = logging.getLogger('zhp')

# 设置日志记录器的等级
logger.setLevel(logging.DEBUG)

# 设置记录器的格式
logger_format = logging.Formatter('%(levelname)s %(asctime)s %(filename)s %(lineno)s:%(message)s')

# 选择将日志输出到哪里去:控制台输出
stream_handler = logging.StreamHandler()

# 将handler添加到记录器中
logger.addHandler(stream_handler)

# 日志的输出
logger.info('这是logger的info信息')
logger.error('这是logger的erro信息')

输出效果如下:


logger的格式不会生效,在哪里输出就需要通过对应位置的handler的格式设置才能生效。logger的等级设置也一样。所以需要将定义的记录器的格式赋值给到控制台,代码如下:

stream_handler.setFormatter(logger_format)

效果如下所示:

 2.设置日志文件中输出

import logging

# 通过logger创建一个记录器
logger = logging.getLogger('hzp')
# 设置日志记录器的等级
logger.setLevel(logging.DEBUG)
# 设置记录器的格式
logger_format = logging.Formatter('%(levelname)s %(asctime)s %(filename)s %(lineno)s: %(message)s')

# 选择将日志输出到哪里去:控制台输出
stream_handler = logging.StreamHandler()
# 控制台输出的等级
stream_handler.setLevel(logging.INFO)
# 控制台的格式
stream_handler.setFormatter(logger_format)


# 将日志在文件中输出
file_handler = logging.FileHandler(filename='./file/log1.log')
# 文件输出等级
file_handler.setLevel(logging.DEBUG)
# 设置文件输出的格式
file_handler.setFormatter(logger_format)

# 将handler添加到记录器中
logger.addHandler(stream_handler)
logger.addHandler(file_handler)

# 日志的输出
logger.debug('这是logger的debug信息')
logger.info('这是logger的info信息')
logger.error('这是logger的error信息')

 自动生成了log1.log日志文件,控制台输出的效果如下:

 文件之中的效果如下:

三、配置文件设置与读取

配置项是固定不需要修改的。
获取配置项通过logging.config.fileConfig(配置文件)的方式获取。

配置文件的内容一定记得不要写错,不然会出现问题,其次不要写入中文相关内容,容易因为编码格式造成报错。

配置项文件,是log_conf.ini这样的格式,具体内容不需要大家去记,直接抄就行了,需要用的时候,直接复制过去调用即可,配置项文件如下:

[loggers]
keys = root

[handlers]
keys = fileHandler,streamHandler

[formatters]
keys = simpleFormatter

[logger_root]
level = DEBUG
handlers = fileHandler,streamHandler

[handler_fileHandler]
class = FileHandler
level = DEBUG
formatter = simpleFormatter
args = ('log_conf.log','a','utf-8')

[handler_streamHandler]
class = StreamHandler
level = DEBUG
formatter = simpleFormatter

[formatter_simpleFormatter]
format =  %(levelname)s %(asctime)s %(filename)s %(module)s %(funcName)s %(lineno)s:%(message)s

读取ini配置项,实现logging的配置与输出,要读取ini实现日志库的配置,
则需要调用logging.config模块


# 导入logging.config
import logging.config

# 将日志记录器封装为函数,如果需要,则直接调用,生成logger来进行日志的记录
def getLogger():
    # 读取配置文件
    logging.config.fileConfig('log_conf.ini')
    # 获取记录器
    logger = logging.getLogger()
    return logger


# 实例化记录器对象
logger = getLogger()
# 日志的输出
logger.debug('这是debug信息')
logger.info('这是info信息')
logger.warning('这是warning信息')
logger.error('这是error信息')

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值