python之logging日志

一、logging介绍:

使用 logging.debug(text)来打印信息,info等的使用方法与debug一致,都只有一个位置参数

默认日志界别为:会输出warning以上的信息,代码示例:

复制代码
import logging

logging.debug("这是一个debug的信息")
logging.info("这是一个info的信息")
logging.warning("这是一个warning的信息")
logging.error("这是一个error的信息")
logging.critical("这是一个critical的信息")
复制代码

查看日志返回:

 

 

 

二.日志的级别:

从低到高分别是:

debug(调试)-》info(打印信息,类似print) -》waring(警告信息)-》 error(错误)-》 critical(致命)

 

三.日志收集器

可实现自定义打印日志

主要功能:

1.自定义一个日志收集器(getLogger函数),

可自定义名称,否则默认返回 root logger

代码:my_logger = logging.getLogger('bktest')

2.设置级别(setLevel函数)

可以设置日志的收集级别,否则默认使用wainning日志

3.指定输出渠道

ch = logging.StreamHandler()

4.设置输出级别

my_logger.setLevel('DEBUG')

5.对接,添加渠道

my_logger.addHandler(ch)

当收集日志的级别与输出日志的级别不一致时,最终输出结果是两个级别的交集,代码示例:

复制代码
import logging

my_logging = logging.getLogger('bktest')#创建日志收集器
my_logging.setLevel('DEBUG')#设置日志收集级别
ch =logging.StreamHandler()#输出到控制台
my_logging.setLevel('INFO')#设置日志输出级别
my_logging.addHandler(ch)#对接,添加渠道

my_logging.debug("这是一个debug的信息")
my_logging.info("这是一个info的信息")
my_logging.warning("这是一个warning的信息")
my_logging.error("这是一个error的信息")
my_logging.critical("这是一个critical的信息")
复制代码

查看输出结果:

 

 

 四.优化日志信息

常用格式化呼输出语句:

复制代码
%(name)s logger(日志收集器)的名字
%(levelname)s 文本形式的日志级别
%(leveIno)s 数字形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d 输出日志信息时,自logger创建依赖的毫秒数
%(asctime)s 字符串形式的当前时间,默认格式是"2022-05-27 00:10:00,000"。逗号后面是毫秒
%(thread)d 线程ID,可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程ID,可能没有
%(message)s 用户输出的消息
复制代码

代码如下:

复制代码
import logging

my_logging = logging.getLogger('bktest')#创建日志收集器
my_logging.setLevel('DEBUG')#设置日志收集级别
ch =logging.StreamHandler()#输出到控制台
my_logging.setLevel('INFO')#设置日志输出级别
my_logging.addHandler(ch)#对接,添加渠道

#指定输出的格式
formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息-%(message)s')
#规定日志输出的时候按照formatter格式来打印
ch.setFormatter(formatter)

my_logging.debug("这是一个debug的信息")
my_logging.info("这是一个info的信息")
my_logging.warning("这是一个warning的信息")
my_logging.error("这是一个error的信息")
my_logging.critical("这是一个critical的信息")
复制代码

查看输出结果:

 

 

五、日志文件输出

复制代码
import logging
import os
import time

root_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
log_dir=os.path.join(root_dir,"logs")
if not os.path.exists(log_dir):
    os.mkdir(log_dir)


my_logging = logging.getLogger('bktest')#创建日志收集器
my_logging.setLevel('DEBUG')#设置日志收集级别
ch =logging.StreamHandler()#输出到控制台
my_logging.setLevel('INFO')#设置日志输出级别
my_logging.addHandler(ch)#对接,添加渠道

#创建文件处理器fh,log_file为日志存放的文件夹
log_file=os.path.join(log_dir,"{}_log".format(time.strftime("%Y-%m-%d",time.localtime())))
fh = logging.FileHandler(log_file,encoding="UTF-8")
my_logging.addHandler(fh)#对接,添加渠道

#指定输出的格式
formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息-%(message)s')
#规定日志输出的时候按照formatter格式来打印
ch.setFormatter(formatter)
fh.setFormatter(formatter)


my_logging.debug("这是一个debug的信息")
my_logging.info("这是一个info的信息")
my_logging.warning("这是一个warning的信息")
my_logging.error("这是一个error的信息")
my_logging.critical("这是一个critical的信息")
复制代码

运行结果如下:

 

 

 

posted @   Mrwhite86  阅读(206)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2020-05-27 Liunx常用操作(七)-文件上传下载方法
2020-05-27 python之十进制、二进制、八进制、十六进制转换
点击右上角即可分享
微信分享提示