【Python编程】Python_logging 模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39591494/article/details/83964517

Python_logging 模块


一、日志的作用?

在每天运维人员的工作中,接触服务器还是很多的,比如:web服务器,有可能有一个服务宕了,我们都会去看它的日志,比如web服务Nginx为例:Nginx启动失败,首先我们会去它安装路径查找error.log这个日志,因为这个日志里面存放着内容:告诉你为什么nginx会启动失败,有很多原因,所以在这里日志起到了很大的作用,它不仅能为运维人员提供帮助,同时也可以给研发人员进行日志参考来调试代码,及时发现问题并快速定位、解决问题,补救损失。

1、日志的等级

在日志中有五个等级如下:

  • debug:这是一个debug日志的级别,是一个详细信息日志。
  • info:这是一个info日志的级别,证明事情按预期工作。 关键事件。
  • warning:这是一个warning日志级别,是一个警告日志。
  • error:这是一个error日志级别,是一个错误日志。
  • critical:这是一个critical日志级别,是一个非常严重错误的日志(灾难)

在使用日志的时候,我们需要导入logging模块。 debug info等等日志级别就是logging里面的一些方法,后面加上需要输出的内容就可以了。

例如1:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import logging
logging.debug("这是一个debug日志的级别,是一个详细信息日志")
logging.info("这是一个info日志的级别,是一个确认事情按预期工作的日志")
logging.warning("这是一个warning的日志级别,是一个警告的日志")
logging.error("这是一个error的日志级别,是一个错误的日志")
logging.critical("这是一个critical日志级别,是一个非常严重错误的日志")
# 以下为输出的结果
>>>
WARNING:root:这是一个warning的日志级别,是一个警告的日志
ERROR:root:这是一个error的日志级别,是一个错误的日志
CRITICAL:root:这是一个critical日志级别,是一个非常严重错误的日志

注意:在5个日志级别等级中,默认的等级是warning,所以默认输出warning等级以上的日志信息,如:warning error critical

2、配置日志的等级

在以上的例子中可以看出,默认输出的是warning以上的等级日志信息,更改等级配置可以通过logging.besicConfig方法来做一些日志等级的配置

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import logging
logging.basicConfig(level="DEBUG") # 我们可以使用basicConfig来配置日志的等级。

logging.debug("这是一个debug日志的级别,是一个详细信息日志")
logging.info("这是一个info日志的级别,是一个确认事情按预期工作的日志")
logging.warning("这是一个warning的日志级别,是一个警告的日志")
logging.error("这是一个error的日志级别,是一个错误的日志")
logging.critical("这是一个critical日志级别,是一个非常严重错误的日志")
# 以下为输出的结果:
DEBUG:root:这是一个debug日志的级别,是一个详细信息日志
INFO:root:这是一个info日志的级别,是一个确认事情按预期工作的日志
WARNING:root:这是一个warning的日志级别,是一个警告的日志
ERROR:root:这是一个error的日志级别,是一个错误的日志
CRITICAL:root:这是一个critical日志级别,是一个非常严重错误的日志

那么使用logging.basicConfig就可以对日志的等级进行配置 后面加:level="日志的等级"

3、配置日志的输出信息

有时候我们需要输出一些内容,比如access.log日志一样,有时间,网址,状态码,用户等等

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import logging
logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG)
# 同时还是使用basicConfig来配置,levelname就是日志等级的意思,message就是日志的内容。
>>>
DEBUG:这是一个debug日志的级别,是一个详细信息日志
INFO:这是一个info日志的级别,是一个确认事情按预期工作的日志
WARNING:这是一个warning的日志级别,是一个警告的日志
ERROR:这是一个error的日志级别,是一个错误的日志
CRITICAL:这是一个critical日志级别,是一个非常严重错误的日志

4、如何修改日志时间的格式?

logging.basicConfig(format="%(asctime)a:%(message)s",level="DEBUG")
>>>
2018-11-11 23:05:39,642:这是一个debug日志的级别,是一个详细信息日志
2018-11-11 23:05:39,642:这是一个info日志的级别,是一个确认事情按预期工作的日志
2018-11-11 23:05:39,642:这是一个warning的日志级别,是一个警告的日志
2018-11-11 23:05:39,643:这是一个error的日志级别,是一个错误的日志
2018-11-11 23:05:39,643:这是一个critical日志级别,是一个非常严重错误的日志

5、来点稍微复杂的格式?

提到复杂的格式,应该是在logging.baicConfig()括号里面加点其他的东西就可以了如下:

logging.basicConfig(format='%(lineno)d - %(filename)s - %(asctime)s - %(name)s - %(levelname)s - %(message)s',level="DEBUG")

logging.debug("这是一个debug日志的级别,是一个详细信息日志")
logging.info("这是一个info日志的级别,是一个确认事情按预期工作的日志")
logging.warning("这是一个warning的日志级别,是一个警告的日志")
logging.error("这是一个error的日志级别,是一个错误的日志")
logging.critical("这是一个critical日志级别,是一个非常严重错误的日志")
>>>
13 - loglog.py - 2018-11-11 23:15:54,000 - root - DEBUG - 这是一个debug日志的级别,是一个详细信息日志
14 - loglog.py - 2018-11-11 23:15:54,001 - root - INFO - 这是一个info日志的级别,是一个确认事情按预期工作的日志
15 - loglog.py - 2018-11-11 23:15:54,001 - root - WARNING - 这是一个warning的日志级别,是一个警告的日志
16 - loglog.py - 2018-11-11 23:15:54,001 - root - ERROR - 这是一个error的日志级别,是一个错误的日志
17 - loglog.py - 2018-11-11 23:15:54,001 - root - CRITICAL - 这是一个critical日志级别,是一个非常严重错误的日志

这时候输出的就有点专业了,解释如下:

  • lineno:输出日志的行数
  • filename:输出当前日志文件的名称
  • asctime:输出当前的一个时间
  • name: 输出当前用户名称
  • levelname:输出当前的日志级别
  • message:输出当前日志的内容

6、如何在工程中使用如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import logging

def yankerp(logger_name="YANKAI-LOG", log_file="yankai.log",level=logging.DEBUG):
    # 创建logger对象
    logger = logging.getLogger(logger_name)
    logger.setLevel(level)

    # 创建控制台
    ch = logging.StreamHandler()
    ch.setLevel(level)

    # 创建文件
    fh = logging.FileHandler(filename=log_file, encoding="utf-8")

    # create formatter
    formatter = logging.Formatter('%(asctime)s - %(filename)s - %(name)s - [line:%(lineno)d]- %(levelname)s - %(message)s')

    # 添加 formatter

    ch.setFormatter(formatter)
    fh.setFormatter(formatter)

    logger.addHandler(ch)
    logger.addHandler(fh)

    return logger

首先定义了一个函数yankerp 定义了logger_name log_file level参数。

1、首先创建logger对象,其实在这里logger只是一个变量而已,把logging.getLogger类实例化成一个logger对象

2、使用logger对象的其中的方法setLevel设置日志等级:(level)这里就是DEBUG

3、创建控制台,使用logging.StreamHandler() 方法,实例化生成对象ch

4、用过ch对象里面的setLevl方法来设置日志等级

5、创建文件,使用logging里面方法,FileHandler定义了file_name也就是yankai.log文件名称及 encoding:编码格式.

6、创建formatter定义了日志的输出格式实例化到formatter对象。

最后添加formatter 控制台/创建文件把formatter输出格式的对象添加到控制台/文件,最后使用刚开始实例化的logger对象把文件,控制台添加进入,最后返回logger对象。

如何使用如下:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39591494/article/details/83964517