唐山做网站价格,长春关键词推广,优化大师,软件开发兼职平台1、概括理解
了解了四大组件的基本定义之后#xff0c;我们通过图示的方式来理解下信息的传递过程#xff1a; 也就是获取的日志信息#xff0c;进入到Logger日志器中#xff0c;传递给处理器确定要输出到哪里#xff0c;然后进行过滤器筛选#xff0c;通过后再按照定义…1、概括理解
了解了四大组件的基本定义之后我们通过图示的方式来理解下信息的传递过程 也就是获取的日志信息进入到Logger日志器中传递给处理器确定要输出到哪里然后进行过滤器筛选通过后再按照定义的格式进行日志的输出。
如果你想学习自动化测试我这边给你推荐一套视频这个视频可以说是B站播放全网第一的自动化测试教程同时在线人数到达1000人并且还有笔记可以领取及各路大神技术交流798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集实战最新版_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集实战最新版共计200条视频包括1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等UP主更多精彩视频请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from333.337.search-card.all.click
2、详细说明 描述上面这个图的日志流处理流程 1在用户代码中进行日志记录函数调用如logger.info(…)logger.debug(…)等 2判断要记录的日志级别是否满足日志器设置的级别要求。 要记录的日志级别要大于或等于日志器设置的级别才算满足要求如果不满足则该日志记录会被丢弃并终止后续的操作如果满足则继续下一步操作 3根据日志记录函数调用时传入的参数创建一个日志记录LogRecord类对象 4判断日志记录器上设置的过滤器是否拒绝这条日志记录如果日志记录器上的某个过滤器拒绝则该日志记录会被丢弃并终止后续的操作。如果日志记录器上设置的过滤器不拒绝这条日志记录或者日志记录器上没有设置过滤器则继续下一步操作将日志记录分别交给该日志器上添加的各个处理器 5判断要记录的日志级别是否满足处理器设置的级别要求。 要记录的日志级别要大于或等于该处理器设置的日志级别才算满足要求如果不满足记录将会被该处理器丢弃并终止后续的操作如果满足则继续下一步操作 6判断该处理器上设置的过滤器是否拒绝这条日志记录如果该处理器上的某个过滤器拒绝则该日志记录会被当前处理器丢弃并终止后续的操作。如果当前处理器上设置的过滤器不拒绝这条日志记录或当前处理器上没有设置过滤器测继续下一步操作 7如果能到这一步说明这条日志记录经过了层层关卡允许被输出了此时当前处理器会根据自身被设置的格式器如果没有设置则使用默认格式会将这条日志记录进行格式化最后将格式化后的结果输出到指定位置文件、网络、类文件的Stream等 8如果日志器被设置了多个处理器的话上面的第5-8步会执行多次 9这里才是完整流程的最后一步判断该日志器输出的日志消息是否需要传递给上一级logger。 日志器是有层级关系的如果propagate属性值为1则表示日志消息将会被输出到处理器指定的位置同时还会被传递给parent日志器的handlers进行处理直到当前日志器的propagate属性为0停止如果propagate值为0则表示不向parent日志器的handlers传递该消息到此结束。
可见一条日志信息要想被最终输出需要依次经过以下几次过滤
日志器等级过滤日志器的过滤器过滤日志器的处理器等级过滤日志器的处理器的过滤器过滤
3、应用示例
1需求
1要求将所有级别的所有日志都写入磁盘文件中2all.log文件中记录所有的日志信息日志格式为日期和时间 - 日志级别 - 日志信息。3error.log文件中单独记录error及以上级别的日志信息日志格式为日期和时间 - 日志级别 - 文件名[:行号] - 日志信息。4要求all.log在每天凌晨进行日志切割。
2分析 1要记录所有级别的日志因此日志器的有效level需要设置为最低级别DEBUG; 2日志需要被发送到两个不同的目的地因此需要为日志器设置两个handler 另外两个目的地都是磁盘文件因此这两个handler都是与FileHandler相关的 3all.log要求按照时间进行日志切割因此他需要用logging.handlers.TimedRotatingFileHandler类; 而error.log没有要求日志切割因此可以使用FileHandler类; 4两个日志文件的格式不同因此需要对这两个handler分别设置格式器
3示例
# 导入logging模块
import logging
import logging.handlers
# 或者 from logging.handlers import TimedRotatingFileHandler
import datetime# 创建一个日志器就是一个logger对象
logger logging.getLogger(logger)
# 设置logger日志级别
logger.setLevel(logging.DEBUG)# 定义处理器1
# 这里进行简化
# rf_handler logging.handlers.TimedRotatingFileHandler(all.log, whenmidnight, interval1, backupCount7,
# atTimedatetime.time(0, 0, 0, 0))TimedRotatingFileHandler位于logging.handlers模块中
支持按一定时间间隔更换磁盘日志文件。这样就可以保证日志单个文件不会太大。
可以根据官方文档自己学习
https://docs.python.org/zh-cn/3/library/logging.handlers.html
all_handler logging.FileHandler(../log/all.log, encodingutf-8)# 给处理器传入格式器
all_handler.setFormatter(logging.Formatter(%(asctime)s - %(levelname)s - %(message)s))# 定义处理器2
error_handler logging.FileHandler(../log/error.log, encodingutf-8)
# 设置处理器日志级别
error_handler.setLevel(logging.ERROR)
# 给处理器传入格式器
error_handler.setFormatter(logging.Formatter(%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s))# 把两个处理器添加到日志器中
logger.addHandler(all_handler)
logger.addHandler(error_handler)logger.debug(debug message)
logger.info(info message)
logger.warning(warning message)
logger.error(error message)
logger.critical(critical message)
执行结果
all.log文件输出
2021-01-15 23:12:27,197 - DEBUG - debug message
2021-01-15 23:12:27,198 - INFO - info message
2021-01-15 23:12:27,198 - WARNING - warning message
2021-01-15 23:12:27,198 - ERROR - error message
2021-01-15 23:12:27,198 - CRITICAL - critical message
error.log文件输出
2021-01-15 23:12:27,198 - ERROR - demo_log3.py[:35] - error message
2021-01-15 23:12:27,198 - CRITICAL - demo_log3.py[:36] - critical message