日志模块

导入

import logging

python-日志模块-logging_生成日志

logging,就是日志单词 log的现在进行时

一个动作正在进行

吃饭,吃饭中

打怪,打怪中

日志的五个级别

python-日志模块-logging_文件处理_02

python-日志模块-logging_python_03
日志级别的用法

模块名.方法名()
logging.级别(str要显示的内容)

例子:

import logging

num = input("请输入一个数字")

try:
    int_num = int(num)
except:
    logging.error("非法的输入{}".format(num))
print('结束了')
日志的运行级别

默认的运行级别是warning,警告级别

修改运行级别,可以让更低级别的被显示出来

logging.basicConfig(level=logging.DEBUG)
日志保存为文件

新增 filename配置

logging.basicConfig(
    level=logging.DEBUG,
    filename=文件的路径
)

当设置了日志保存在文件时

信息就不会再屏幕上显示了

修改日志的保存模式

默认是追加模式

如果希望通过定入赋盖模式

filemode="w",
logging.basicConfig(
    level=logging.DEBUG,
    filename="mylog.log",
    filemode="w",
)
格式化输出日志显示的内容

回顾以前的格式化输出

用一个例子来回顾

m = "我的名字叫%s,我的身高是%.2f,我今年%d,我的学号是%04d" %("吕小布", 1.7444, 22, 32)
print(m)

结果
C:\Users\python_hui\Anaconda3\python.exe G:/教学管理系统1907/oneone/test.py
我的名字叫吕小布,我的身高是1.74,我今年22,我的学号是0032

Process finished with exit code 0

对于logging模块中,日志的格式化输出

用法格式

format = "%(类型)s"

更多类型
python-日志模块-logging_运行级别_04

演示代码

import logging

logging.basicConfig(
    level=logging.DEBUG,
    filename="mylog.log",
    filemode="w",
    format="%(asctime)s %(filename)s %(lineno)s: %(message)s"
)

num = input("请输入一个数字")

try:
    int_num = int(num)
except:
    logging.info("非法的输入{}".format(num))
print('结束了')

写模式的代码,每一次日志的内容,都会被重写

效果

2019-07-01 14:01:29,433 test_log.py 15: 非法的输入b

获得日志对象

获取方式

logging.getLogger()

import logging

# 获得日志对象
logger = logging.getLogger()
print(logger)
print(logger.__dict__)

日志对象的属性字典

{‘filters’: [], ‘name’: ‘root’, ‘level’: 30, ‘parent’: None, ‘propagate’: True, ‘handlers’: [], ‘disabled’: False, ‘_cache’: {}}

日志对象的特点

可以实现,同时,在屏幕上显示 内容,和文件中输出内容

它这样操作的机理,是需要两个对象支持的

对象一,是文件处理器,filehandler

对象二,屏幕处理器,streamhandler

日志对象的完整配置
import logging,os,time

def get_logger():
    """
    获取日志对象,已经对日志对象进行了相关的设置了
    :return:
    """
    # 生成日志对象
    logger = logging.getLogger()
    # 设置提示级别
    logger.setLevel("INFO")
    # 生成日志保存路径
    current_dir = os.path.dirname(os.path.abspath(__file__))
    logger_file_path = os.path.join(current_dir, time.strftime("%Y%m%d")+".log")
    # 设置输出对象
    file_handler = logging.FileHandler(logger_file_path, encoding="utf8")
    stream_handler = logging.StreamHandler()
    # 设置日志输出的格式
    fmt = logging.Formatter("%(asctime)s %(filename)s %(lineno)s : %(message)s")
    # 设置输出对象按照格式来输出
    file_handler.setFormatter(fmt)
    # 日志对象添加输出对象
    if not logger.handlers:
        logger.addHandler(file_handler)
        logger.addHandler(stream_handler)
    return logger

if __name__ == '__main__':

    l = get_logger()
    l.info('haha')

图示日志模块

python-日志模块-logging_运行级别_05
更正,图片器对象有setformatter方法

处理器对象包括了文件处理器对象,流处理器对象

日志对象的使用

当日志对象配置好了以后,如果使用,格式为

日志对象.运行级别(str日志内容)

例子:
logger.info("启动运行功能")

------------以下是备课笔记----------------------

日志模块帮助我们记录信息

python-日志模块-logging_生成日志_06
python-日志模块-logging_python_07

非常重要的模块

示例

python-日志模块-logging_python_08

日志级别,五个

python-日志模块-logging_python_09

设置运行级别
python-日志模块-logging_格式化输出_10

python-日志模块-logging_运行级别_11
默认信息显示在控制台的

python-日志模块-logging_文件处理_12
设置后内容输出到文件了

默认是追加模式

python-日志模块-logging_python_13
将追加模式设置为写模式,默认是追加模式

python-日志模块-logging_格式化输出_14
python-日志模块-logging_格式化输出_15
python-日志模块-logging_文件处理_16

python-日志模块-logging_运行级别_17
显示时间与行号

python-日志模块-logging_生成日志_18

python-日志模块-logging_文件处理_19
python-日志模块-logging_生成日志_20

加文件名,加日志内容

python-日志模块-logging_格式化输出_21
其它参数

日志对象

python-日志模块-logging_python_22

日志对象

python-日志模块-logging_格式化输出_23

python-日志模块-logging_生成日志_24
屏幕与文件对象,不完整版

python-日志模块-logging_python_25

大鱼吃小鱼,小鱼吃虾米的方式

python-日志模块-logging_格式化输出_26

生态链

python-日志模块-logging_运行级别_27
打印日志

屏幕与文件同时显示

python-日志模块-logging_运行级别_28

默认warning模式

python-日志模块-logging_格式化输出_29

修改日志对象的默认级别

python-日志模块-logging_格式化输出_30

python-日志模块-logging_生成日志_31
开发实用

把日志的设置处理一下

让函数返回一个logger对象

用时直接调对象的方法

回顾

python-日志模块-logging_运行级别_32
添加日志

python-日志模块-logging_文件处理_33
日志的子对象

getLogger参数写名称

python-日志模块-logging_格式化输出_34

python-日志模块-logging_生成日志_35

根,子,孙子,层级

python-日志模块-logging_生成日志_36

根对象,输出

子对象也在输出时

子对象会输出多次

原因是,子对象输出时看看上级,上也在输出,自己会再次输出

解决重复输出的办法, 让上级对象停止输出就可

python-日志模块-logging_文件处理_37
设置日志文件的编码为 utf8编码