logging模块

参考文章:https://www.bilibili.com/video/BV1sK4y1x7e1/?spm_id_from=333.337.search-card.all.click&vd_source=a6f518f0e60ad7082f62682515731cb2
① logging模块的作用:处理日志
② 五大logging库日志级别:
    级别      级别数值    使用时机
    DEBUG     10        详细信息,常用于调试
    INFO      20        程序正常运行过程中产生的一些信息
    WARNING   30        敬告用户,虽然程序还在正常工作, 但有可能发生错误(默认日志级别)
    ERROR     40        由于更严重的问题,程序已不能执行一些功能了
    CRITICAL  50        严重错误,程序已不能继续运行
③ 注意:
logging.DEBUG是一个变量
logging.debug是一个日志输出函数
两者不要搞混
④ logging模块提供了四个核心的类,四大工具:
    Loggers: 记录器,相当于一支笔,每支笔都拥有一个名字,可以先定义若干根笔,拿需要的一根笔去写,提供应用程序代码所能直接使用的接口
    Handlers: 处理器,将记录器产生的日志发送到目的地,eg. console,文件,email,一个记录器可以对应多个处理器
    Filters: 过滤器,绑定在记录器或者处理器上,来决定哪些日志被输出,以笔的名字来过滤
    Formatters: 格式化器,设置日志内容的组成结构和消息字段
⑤ 几种日志报错方式:
    1、编程式使用日志 示例代码四
    2、logging格式的配置文件 .conf文件  logging.config.fileConfig('logging.conf')  示例代码五
    3、字典方式的配置  logging.config.dictConfig(),比如可以是json、xmal格式,只要能用代码将文件转换成字典就行
# 示例代码一:
默认的日志输出级别是warning,没有指定输出去向的时候默认输出在console/控制台上打印日志信息,默认输出内容:日志级别:记录器:内容
使用basicConfig()来指定日志输出级别
将日志输出到文件中 filename=...,设置下一次写入更新filemode="w" 写入模式 / "a" 追加模式
# 示例代码一:
"""
默认的日志输出级别是warning,没有指定输出去向的时候默认输出在console/控制台上打印日志信息,默认输出内容:日志级别:记录器:内容
使用basicConfig()来指定日志输出级别
将日志输出到文件中 filename=...,设置下一次写入更新filemode="w" 写入模式 / "a" 追加模式
"""
logging.basicConfig(level=logging.DEBUG, filename="try.log", filemode="w")

logging.debug("This is a debug message")
logging.info("This is a info message")
logging.warning("This is a warning message")
logging.error("This is a error message")
logging.critical("This is a critical message")
# 示例代码二:
可以向日志输出变量:格式化字符串输出在这里也适用
# 示例代码二:
"""
可以向日志输出变量:格式化字符串输出在这里也适用
"""
name = "张三"
age = 18
logging.basicConfig(level=logging.DEBUG)
logging.debug("姓名 %s 年龄 %d", name, age)
logging.debug("姓名 %s 年龄 %d" % (name, age))
logging.debug("姓名 {} 年龄 {}".format(name, age))
logging.debug(f"姓名 {name} 年龄 {age}")
# 示例代码三:
输出格式和添加一些公共信息:
① format格式内容记忆:%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s
② 日期格式记忆:datefmt="%Y-%m-%d %H:%M:%S"
# 示例代码三:
"""
输出格式和添加一些公共信息:
① format格式内容记忆:%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s
② 日期格式记忆:datefmt="%Y-%m-%d %H:%M:%S"
"""
logging.basicConfig(format="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s", datefmt="%Y-%m-%d %H:%M:%S",
                    level=logging.DEBUG)
logging.debug("This is a debug message")
logging.warning("This is a warning message")
# 示例代码四:以编程的方式输出日志级别,仅仅适用于一些小项目
注意:
① logging.debug()是模块里的函数    logger.debug()是对象里的方法   两者是不一样的
② logger如果不设置日志输出级别的话默认为warning级别,在输出级别时一般会选择记录器和处理器上最低等级的输出级别,
   一般写一句logger的日志级别为DEBUG:logger.setLevel(logging.DEBUG)

# 示例代码四:以编程的方式输出日志级别,仅仅适用于一些小项目
"""
注意:
① logging.debug()是模块里的函数    logger.debug()是对象里的方法   两者是不一样的
② logger如果不设置日志输出级别的话默认为warning级别,在输出级别时一般会选择记录器和处理器上最低等级的输出级别,
   一般写一句logger的日志级别为DEBUG:logger.setLevel(logging.DEBUG)
"""
# 记录器Loggers
logger = logging.getLogger("applog")
# 设置logger的默认日志级别
logger.setLevel(logging.DEBUG)

# 处理器Handlers
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.INFO)

# 没有给fileHandler设置日志级别,将使用logger的默认设置级别
fileHandler = logging.FileHandler(filename="appDemo.log")
fileHandler.setLevel(logging.DEBUG)

# formatter格式
# 对齐方式:%(levelname)-8s,加个-左对齐
formatter = logging.Formatter("%(asctime)s|%(levelname)-8s|%(filename)8s:%(lineno)s|%(message)s")

# 定义一个过滤器
# 如果是cn.cccb则无法正常输出;如果是applog则会正常输出
flt = logging.Filter("cn.cccb")
# flt = logging.Filter("applog")

# 关联过滤器——可以是记录器和处理器
# logger.addFilter(flt)
fileHandler.addFilter(flt)
consoleHandler.addFilter(flt)

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

# 将记录器和处理器关联
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)

logger.debug("This is a debug message")
logger.info("This is a info message")
logger.warning("This is a warning message")
logger.error("This is a error message")
logger.critical("This is a critical message")
# 示例代码五:以配置文件的方式输出日志级别,适用于大项目
关于报错信息的输出:使用logger.exception(e);若使用logger.error(e)则不会输出具体报错信息
# 示例代码五:以配置文件的方式输出日志级别,适用于大项目
"""
关于报错信息的输出:使用logger.exception(e);若使用logger.error(e)则不会输出具体报错信息
"""
import logging.config
import logging

logging.config.fileConfig('logging.conf')

root_logger = logging.getLogger()
root_logger.debug("This is a root_logger debug message")
logger = logging.getLogger("applogger")
logger.debug("This is a applogger debug message")
a = "abc"
try:
    int(a)
except Exception as e:
    logger.exception(e)
logging.conf文件:
[loggers]
keys=root,applogger

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler


[logger_applogger]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=applogger
propagate=0

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

[handler_fileHandler]
class=FileHandler
args=('applogger.log',"a")
level=DEBUG
formatter=simpleFormatter

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值