Python学习之日志模块详解

 更新时间:2022年03月28日 09:03:48   作者:渴望力量的哈士奇  
说到日志,我们完全可以想象为现实生活中的日记。日记是我们平时记录我们生活中点点滴滴的一种方法,而日志我们可以认为是 程序的日记 ,程序的日记是用来记录程序的行为。本文将详细介绍Python中的日志模块(logging),需要的可以参考一下

OK,今天我们来学习一下 python 中的日志模块,日志模块也是我们日后的开发工作中使用率很高的模块之一,接下来们就看一看今天具体要学习日志模块中的那些内容吧。

日志的作用

说到日志,我们完全可以想象为现实生活中的日记。日记是我们平时记录我们生活中点点滴滴的一种方法,而日志我们可以认为是 程序的日记 ,程序的日记是用来记录程序的行为,一般来说我们可以通过日志记录一些程序的重要信息。

比如哪里报错了?报错原因是什么?这个时候我们就可以通过查看日志知道哪里出了什么错误,并且是什么原因造成的,这样就可以帮助我们快速查错并修复bug。

其实并不仅仅是错误的信息,我们还可以通过日志记录程序运行的状态。

日志的等级

既然明确了日志的作用,在平时的日志记录过程中我们可以根据自己不同的业务需要进行不同等级的日志的记录。

debug:可以帮助我们在平时的开发过程中,帮助我们查看一些输出的信息是否正确。它可以替代我们平时使用的 print() 函数。

info:它代表了一般的消息类信息,只是为了记录一些程序的行为,比如程序执行到了某个位置,进行一些简单的记录。

warnning:该等级是一种警告,一般来说程序不会出错,但是可能存在一定的潜在风险。

error:一般对应业务中出现了重大问题。比如异常或者业务逻辑不应该执行到某种情况。我们都可以通过error来进行记录。

critical:比 error 更严重的级别,不过一般来说 error 级别已经很严重了,所以 critical 很少使用。

logging 模块的使用

其实 logging 模块使用起来还是比较复杂的,不过我们初学乍道,只需要学习使用 logging.basicConfig 就可以满足我们最基本的日志记录功能。

接下来我们看一下 logging.basicConfig 需要传入哪些参数以及如何使用。

参数名作用举例
lever日志输出的最低等级lever=logging.DEBUG
format日志输出格式见下文的 format 具体格式
filename存储位置filename=‘d://debug.log’
filemode输入模式filemode=“w”

关于 lever ,lerver的作用是表示最低的日志等级记录。如上文中的 lever=logging.DEBUG ,就表示记录包含 DEBUG 级别在内的所有日志等级。

format具体格式如下:

格式符含义
%(levername)s日志级别名称
%(pathname)s当前执行程序的路径(即脚本所在的位置)
%(filename)s执行脚本程序名
%(lineno)d日志当前的行号
%(asctime)s打印日志的时间
%(message)s日志信息

常用的日志 fromat 常用方案:fromat = '%(asctime)s %(filename)s[line:%(lineno)d] %(levername)s %(message)s'

logging 模块演示小案例

import logging


logging.basicConfig(        # 针对 basicConfig 进行配置(basicConfig 其实就是对 logging 模块进行动态的调整,之后可以直接使用)
    level=logging.INFO,     # INFO 等级以下的日志不会被记录
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',    # 日志输出格式
    filename='back.log',    # 日志存放路径(存放在当前相对路径)
    filemode='w',           # 输入模式;如果当前我们文件已经存在,可以使用 'a' 模式替代 'w' 模式
                            # 与文件写入的模式相似,'w' 模式为没有文件时创建文件;'a' 模式为追加内容写入日志文件
)


logging.debug('这是一条 debug 信息')
logging.info('这是一条 日志记录 信息')
logging.warning('这是一条 警告 信息')
logging.error('这是一条 重大的错误 信息')

# >>> 执行结果如下图

上面我们使用的 filemode 模式是 'w' 模式,现在我们改为 'a' 模式,尝试将日志追加进入 back.log 文件。

import logging


logging.basicConfig(        # 针对 basicConfig 进行配置(basicConfig 其实就是对 logging 模块进行动态的调整,之后可以直接使用)
    level=logging.INFO,     # INFO 等级以下的日志不会被记录
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',    # 日志输出格式
    filename='back.log',    # 日志存放路径(存放在当前相对路径)
    filemode='a',           # 输入模式;如果当前我们文件已经存在,可以使用 'a' 模式替代 'w' 模式
                            # 与文件写入的模式相似,'w' 模式为没有文件时创建文件;'a' 模式为追加内容写入日志文件
)


logging.debug('这是一条 debug 信息 ---> \'a\' 模式第二次写入')
logging.info('这是一条 日志记录 信息 ---> \'a\' 模式第二次写入')
logging.warning('这是一条 警告 信息 ---> \'a\' 模式第二次写入')
logging.error('这是一条 重大的错误 信息 ---> \'a\' 模式第二次写入')

# >>> 执行结果如下图

这里关于文件是否存在,使用 ‘w’ 模式还是 ‘a’ 模式,我们完全可以通过 os 模块进行路径文件的判断,所以我们针对上文的脚本再进行优化一下。

import logging
import os

def init_log(path):
    if os.path.exists(path):
        mode = 'a'
    else:
        mode = 'w'
    logging.basicConfig(        # 针对 basicConfig 进行配置(basicConfig 其实就是对 logging 模块进行动态的调整,之后可以直接使用)
        level=logging.INFO,     # INFO 等级以下的日志不会被记录
        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',    # 日志输出格式
        filename='back.log',    # 日志存放路径(存放在当前相对路径)
        filemode=mode,          # 输入模式;如果当前我们文件已经存在,可以使用 'a' 模式替代 'w' 模式
                                # 与文件写入的模式相似,'w' 模式为没有文件时创建文件;'a' 模式为追加内容写入日志文件
    )

    return logging


current_path = os.getcwd()
path = os.path.join(current_path, 'back.log')

log = init_log(path)        # 初始化返回的 init_log() 函数 , 其实就是 return logging


log.debug('这是一条 debug 信息 ---> 第三次写入')
log.info('这是一条 日志记录 信息 ---> 第三次写入')
log.warning('这是一条 警告 信息 ---> 第三次写入')
log.error('这是一条 重大的错误 信息 ---> 第三次写入')

# >>> 执行结果如下图:

到此这篇关于Python学习之日志模块详解的文章就介绍到这了,更多相关Python日志模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现实时监控文件的方法

    python实现实时监控文件的方法

    这篇文章主要为大家详细介绍了python实现实时监控文件的3种方法,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Python3实现生成随机密码的方法

    Python3实现生成随机密码的方法

    这篇文章主要介绍了Python3实现生成随机密码的方法,是Python程序设计中非常实用的一个技巧,需要的朋友可以参考下
    2014-08-08
  • python获取全国最新省市区数据并存入表实例代码

    python获取全国最新省市区数据并存入表实例代码

    我们在开发中经常会遇到获取省市区等信息的时候,下面这篇这篇文章主要给大家介绍了关于python获取全国最新省市区数据并存入表的相关资料,需要的朋友可以参考下
    2021-08-08
  • python压缩和解压缩模块之zlib的用法

    python压缩和解压缩模块之zlib的用法

    这篇文章主要介绍了python压缩和解压缩模块之zlib的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 在Django的URLconf中进行函数导入的方法

    在Django的URLconf中进行函数导入的方法

    这篇文章主要介绍了在Django的URLconf中进行函数导入的方法,Django是Python的最为著名的开发框架,需要的朋友可以参考下
    2015-07-07
  • Python 实现交换矩阵的行示例

    Python 实现交换矩阵的行示例

    今天小编就为大家分享一篇Python 实现交换矩阵的行示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python函数递归调用的实现

    python函数递归调用的实现

    本文主要介绍了python函数递归调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Python的爬虫程序编写框架Scrapy入门学习教程

    Python的爬虫程序编写框架Scrapy入门学习教程

    Python的一大优势就是可以轻松制作Web爬虫,而超高人气的Scrapy则是名副其实的Python编写爬虫的利器,这里我们就来看一下Python的爬虫程序编写框架Scrapy入门学习教程:
    2016-07-07
  • Python内建类型int源码学习

    Python内建类型int源码学习

    这篇文章主要为大家介绍了Python内建类型int源码学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python实现的一个火车票转让信息采集器

    python实现的一个火车票转让信息采集器

    这篇文章主要介绍了python实现的一个火车票转让信息采集器,采集信息来源是58同程或者赶集网,需要的朋友可以参考下
    2014-07-07

最新评论