python-logging库的使用

logging库日志级别:

在这里插入图片描述

假如设置为INFO级别,则DEBUG级别的日志不显示,会显示INFO及后面三种级别的日志

logging的高级应用:

在这里插入图片描述

在这里插入图片描述

loggers记录器:

Loggers:可以视为多支笔,并且可以同时向屏幕或文件等同时写日志

在这里插入图片描述

Handlers处理器:

Handlers:它们将日志分发到不同的目的地。可以是文件、标准输出、邮件、或者通过 socke、http等协议发送到任何地方

常见的处理器有:

在这里插入图片描述

Formatters格式化器:

Formatters对象用于最终设置日志信息的顺序、结构和内容

在这里插入图片描述

在这里插入图片描述

Filters过滤器:

可以控制过滤logger或者Handler

示例代码:
import logging
# ----------------------------日志级别----------------------------------------
print('this is a print log')    # 最后打印

# 默认的日志级别的warning,所以只会打印warning,error和critical
logging.basicConfig(filename='demo.log', filemode='w', level=logging.DEBUG)   # 设置日志级别,并将日志信息输出到指定文件中

logging.debug('this is a debug log')
logging.info('this is a info log')
logging.warning('this is a warning log')
logging.error('this is a error log')
logging.critical('this is a critical log')
# ----------------------------日志级别----------------------------------------

# ---------------------------向日志输入变量------------------------------------
logging.basicConfig(level=logging.DEBUG)

name = 'psj'
age = 23
logging.debug('姓名: %s 年龄: %d', name, age)   # 字符拼接方式
logging.debug('姓名: %s 年龄: %d' % (name, age))   # %方式(多个变量要写出元组的格式)
logging.debug('姓名: {} 年龄: {}'.format(name, age))   # format方式
logging.debug(f'姓名: {name} 年龄: {age}')   # fstring方式
# ---------------------------向日志输入变量------------------------------------

# ---------------------------调整输出格式和添加公共信息------------------------------------
logging.basicConfig(format='%(asctime)s-%(levelname)s-%(filename)s-%(lineno)s-%(message)s', level=logging.DEBUG)
name = 'psj'
age = 23
# 不在basicConfig中加format='...'则输出:DEBUG:root:姓名: psj 年龄: 23
logging.debug('姓名: %s 年龄: %d' % (name, age))    # 姓名: psj 年龄: 23(format='%(message)s')
logging.debug('姓名: %s 年龄: %d' % (name, age))    # 2021-07-20 16:22:38,292-姓名: psj 年龄: 23(format='%(asctime)s-%(message)s')
logging.warning('姓名: %s 年龄: %d' % (name, age))    # 2021-07-20 16:24:04,990-WARNING-姓名: psj 年龄: 23(format='%(asctime)s-%(levelname)s-%(message)s')
logging.warning('姓名: %s 年龄: %d' % (name, age))    # 2021-07-20 16:28:05,324-WARNING-日志.py-42-姓名: psj 年龄: 23(format='%(asctime)s-%(levelname)s-%(filename)s-%(lineno)s-%(message)s')
# ---------------------------调整输出格式和添加公共信息------------------------------------


# ---------------------------高级用法(编码方式)------------------------------------
# 1.记录器
logger = logging.getLogger('flt.myname')    # 自定义记录器的名字
logger.setLevel(logging.DEBUG)  # 设置记录器的级别,为了处理器可以任意设置级别,需要将此级别设别最低级的DEBUG

# 2.处理器
consoleHandler = logging.StreamHandler()
# 如果logger设置了级别则使用logger的级别,即使处理器额外设置了级别;并且如果logger没有设置为DEBUG,处理器设置的级别高于DEBUG也只能打印logger此时默认的WARNING
consoleHandler.setLevel(logging.DEBUG)

fileHandler = logging.FileHandler(filename='demo2.log', mode='w')  # 没有指定日志输出级别会默认使用logger的日志级别
fileHandler.setLevel(logging.INFO)
# 3.Formatters格式器
formatter = logging.Formatter('%(asctime)s-%(levelname)8s-%(filename)s-%(lineno)s-%(message)s')  # %(levelname)8s表示设置为8位并且对齐

# 4.定义一个过滤器
flt = logging.Filter('flt')  # 只有前缀为flt的logger才可以使用

# 5.给处理器设置格式
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)

# 6.给记录器设置处理器
logger.addHandler(consoleHandler)   # 给控制台写
logger.addHandler(fileHandler)  # 给文件中写

# 7.关联过滤器
logger.addFilter(flt)
fileHandler.addFilter(flt)  # 不仅可以给logger设置过滤器,还可以给Handler设置

# 8.打印日志代码(使用的是logger不是logging了)
logger.debug('this is a debug log')
logger.info('this is a info log')
logger.warning('this is a warning log')
logger.error('this is a error log')
logger.critical('this is a critical log')
# ---------------------------高级用法(编码方式)------------------------------------

# ---------------------------使用配置文件处理日志------------------------------------
# 配置文件中有中文,会报错,要么删除中文,要么修改fileConfig的源码
import logging.config
logging.config.fileConfig('logging.conf')
rootlogger = logging.getLogger()    # 不加参数默认使用root的logger
rootlogger.debug('this is root logger debug')

logger = logging.getLogger('myname')
logger.debug('this is myname logger debug')

# ---------------------------使用配置文件处理日志------------------------------------

# ---------------------------实际运用------------------------------------
a = 'a'
try:
    int(a)
except Exception as e:
    logger.error(e)  # 如果使用error不会打印具体的错误信息
    logger.exception(e)
# ---------------------------实际运用------------------------------------
logging.conf:
[loggers]
keys=root,myname

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_myname]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=myname
propagate=0

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
args=('profile.log','midnight',1,0)
level=DEBUG
formatter=simpleFormatter

[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)8s|%(filename)s[:%(lineno)d]|%(message)s
datefmt=%Y-%m-%d %H:%M:%S
参考视频:

https://www.bilibili.com/video/BV1sK4y1x7e1?from=search&seid=10952136950967006034

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值