python库--logging日志

python库--logging日志

1、初阶应用

import logging
"""
日志触发时是多线程的,但是会保持日志输出的顺序
logging库的日志级别
 级别     | 级别数值    | 使用时机    
DEBUG    | 10        | 详细信息,常用于调试
INFO     | 20        | 程序正常运行过程中产生的一些信息
WARNING  | 30        | 警告用户,虽然程序还在正常运行,但是可能发生错误
ERROR    | 40        | 由于更严重的问题,程序已经不能执行一些功能了
CRITICAL | 50        | 严重错误,程序已不能继续运行

常用的是INFO
默认日志级别是WARNING,只有级别大于默认日志级别时才会有输出
eg:
logging.debug("This is a debug log.")
logging.info("This is a info log")
logging.warning("This is a info warning")
logging.error("This is a info error")
logging.critical("This is a info critical")

output:
WARNING:root:This is a info warning
ERROR:root:This is a info error
CRITICAL:root:This is a info critical

通过次函数修改默认日志级别:logging.basicConfig(level=logging.DEBUG)
--------------------------------------------------------------

"""
"""初阶应用"""
flag_1 = 4
if flag_1 == 1:
    # logging.basicConfig(level=logging.DEBUG)  # 在软件上打印出来
    # filename:写入文件的名称;filemode:写入模式,和文件的读写一样;level:设置日志的默认级别
    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 info warning")
    logging.error("This is a info error")
    logging.critical("This is a info critical")

elif flag_1 == 2:
    logging.basicConfig(level=logging.DEBUG)
    name = 'Tom'
    age = 18
    logging.debug('姓名:%s, 年龄:%d' % (name, age))

elif flag_1 == 3:
    logging.basicConfig(filename='demo.log', filemode='w',
                        format="Time:%(asctime)s|logging level:%(levelname)s|filename:%(filename)s-line:%(lineno)s|message:%(message)s",
                        level=logging.DEBUG,
                        datefmt="%Y-%m-%d %H:%M:%S")
    name = '张三'
    age = 25
    logging.debug("name:%s, age:%d" % (name, age))
    logging.warning("由于...出错,导致程序中断,请检查...")
else:
    print("第一部分 初级阶段 不输出。")

2、高级应用

"""
logging的高级应用
logging模块采用模块化设计,主要包括四中组件:
----------
Loggers:记录器,提供应用程序代码能直接使用的接口;(笔)
Handlers:处理器,将记录器产生的日志发送至目的地;目的地主要是日志保存文件;或者email发送出去;还有短信等等
Filters:过滤器,提供更好的粒度控制,决定哪些日志会被输出;
Formatters:格式化器,设置日志内容的组成结构和消息字段;
------------------------------------------------------------------------------------------------------------------------
              创建屏幕StreamHandler  设置日志等级 
创建一个                                                                用formatter     将所有的
logger并                                           创建formatter        渲染所有的       Handler加入    调用logger
设置默认等级                                                              Handler        logger内
              创建文件FileHandler    设置日志等级
------------------------------------------------------------------------------------------------------------------------
"""

"""
--------------------------------logger记录器
1.提供应用程序的调用接口
logger=logging.getLogger(__name__)
logger是单例的
2.决定日志的记录级别
logger.setLevel()
3.将日志内容传递到相关联的handlers中
logger.addHandler()和logger.removeHandler()
-----------------------------------------------------------------------------
---------------------------------Handlers处理器
她们将日志分发到不同的目的地;
StreamHandler
标准输出stdout(如显示器)分发器
创建方法:sh = logging.StreamHandlers(stream=None)
FileHandler
将日志保存到磁盘文件的处理器
创建方法:fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)
---
所有的Handler都可以使用setFormatter():设置日志的输出格式
----
--------------------常用的Handlers:
StreamHandler:
FileHandler:
BaseRotatingHandler:
RotatingFileHandler:按照文件大小生成多个日志文件
TimeRotatingFileHandler:按照时间生成日志文件
---------------------------------------------------------------------------------------
----------------------------------Formatter格式
Formatter对象是用来最终设置日志的信息顺序、结构和内容。
构造方法为:
ft = logging.Formatter.__init__(fmt=None, datefmt=None, style='%')
datefmt默认是%Y-%m-%d %H:%M:%S样式的
style参数默认是百分符,这表示%(<dictionary key>)s格式的字符串
常用的属性:asctime:%(asctime)s; filename:%(filename)s; levelname:%(levelname)s; levelno:%(levelno)s; 
"""
"""高级应用"""
flag_2 = 1
if flag_2 == 1:
    # 记录器,日志级别最高
    logger = logging.getLogger('app log')
    logger.setLevel(level=logging.DEBUG)  # 设置为最低级别

    # 处理器,日志级别比记录器低一级
    consolHandler = logging.StreamHandler()
    consolHandler.setLevel(level=logging.DEBUG)
    # 没有给Handler指定几倍,默认使用logger级别
    fileHandler = logging.FileHandler(filename='addDemo.log', )
    fileHandler.setLevel(logging.INFO)

    # formatter
    formatter = logging.Formatter(
    fmt="%(asctime)s|%(levelname)9s|%(filename)s line:%(lineno)s|%(message)s", 
    datefmt="%Y-%m-%d %H:%M:%S")

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

    # 给记录器设置处理器
    logger.addHandler(consolHandler)
    logger.addHandler(fileHandler)

    # 过滤器,过滤处理器和记录器的
    flt = logging.Filter("app log")  # 开头是这个的才能通过
    fileHandler.addFilter(flt)

    logger.debug('This is debug')
    logger.info('This is info')
    logger.warning('This is warning')
    logger.error('This is error')
    logger.critical('This is critical')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值