当前位置: 首页 > news >正文

网站建设的可用性百度关键词推广价格查询

网站建设的可用性,百度关键词推广价格查询,现在1做啥网站流量大,山西人工智能建站系统软件文章目录 开发组日志记录SPEC_v0.1.0目的设计逻辑1. User日志记录器1.1 记录器标签内容介绍1.2 程序打印User日志规则 2. Dev日志记录器2.1 记录器标签内容介绍2.2 程序打印Dev日志规则 3.代码说明3.1 代码详情3.2 使用说明 更新记录 时间版本内容修订者备注2024/08/150.1.0创…

文章目录

  • 开发组日志记录SPEC_v0.1.0
    • 目的
    • 设计逻辑
    • 1. User日志记录器
      • 1.1 记录器标签内容介绍
      • 1.2 程序打印User日志规则
    • 2. Dev日志记录器
      • 2.1 记录器标签内容介绍
      • 2.2 程序打印Dev日志规则
    • 3.代码说明
      • 3.1 代码详情
      • 3.2 使用说明

更新记录

时间版本内容修订者备注
2024/08/150.1.0创建henry.xu

开发组日志记录SPEC_v0.1.0

目的

    1. 区分用户日志和开发人员日志
    1. 帮助开发人员快速定位

设计逻辑

  • 重新封装logging模块,在基本不改变代码的情况下替换掉之前使用的log日志系统;
  • 定义两个日志记录器分别对应User 和 Dev;
  • 提供参数dev区分两个日志记录器;dev=True代表Dev日志记录器;dev=False代表User日志记录器
  • 为了方便开发人员开发调试,提供参数dev_log_enabled,为True的时候,控制台会打印属于 Dev 记录器的日志信息,反之则不打印;

1. User日志记录器

  • 高于或等于设置的日志事件等级的日志,控制台和log文件都会记录;

1.1 记录器标签内容介绍

  • User 代表给用户看的日志内容;
  • D 代表该日志等级为debug;
  • 2024-08-12 18:57:44 代表打印日志的时间;
  • auto_logger 代表当前模块名称;
  • 121代表代码在当前模块所在行数;
  • This is a debug message 代表用户要看到的信息;
[User D 2024-08-12 18:57:44 auto_logger:121] This is a debug message

1.2 程序打印User日志规则

  • 按照需求分析表步骤编号打印

  • 日志内容格式规则:

    • Step:按照项目需求分析表中的步骤编号填写;
    • 步骤内容:按照项目需求分析表中的需求描述或功能介绍填写;
    • 信息反馈:按照项目需求分析表中的预期效果填写;
    • 测试结果:执行成功为PASS, 反之则为FAIL;
#例子:#代码
logger.info("""Step: 1-1-1步骤内容: 设置UAC:搜索UAC->选择Change User Account Control settings打开UAC设置界面->设置UAC为Never notify->点击ok完成信息反馈: 成功设置UAC为Never notify测试结果: PASS""")# 实际效果:
[User I 2024-08-15 10:54:59 auto_logger:130] Step: 1-1-1步骤内容: 设置UAC:搜索UAC->选择Change User Account Control settings打开UAC设置界面->设置UAC为Never notify->点击ok完成信息反馈: 成功设置UAC为Never notify测试结果: PASS

2. Dev日志记录器

2.1 记录器标签内容介绍

  • Dev代表这是给开发/测试/需求人员的,可以设置是否需要在控制台上打印
  • 其他内容同User日志记录器;
[Dev  I 2024-08-12 19:00:26 auto_logger:122] This is an info message

2.2 程序打印Dev日志规则

  • 要求程序执行每个方法前需要打印"STA: 方法名",执行完方法以后,打印"END:方法名";
# 例子
# 利用装饰器实现import timedef log_execution(func):def wrapper(*args, **kwargs):logger.info(f"STA: {func.__qualname__}", dev=True)result = func(*args, **kwargs)logger.info(f"END: {func.__qualname__}", dev=True)return resultreturn wrapperclass MyClass:@log_executiondef my_method_1(self):time.sleep(1)logger.info("正在执行 my_method_1")@log_executiondef my_method_2(self, x):time.sleep(2)logger.info(f"正在执行 my_method_2,参数: {x}")# 示例用法
obj = MyClass()
obj.my_method_1()
obj.my_method_2(5)# log展示:
"""
[Dev  I 2024-08-15 14:07:41 auto_logger:142] STA: MyClass.my_method_1
[User I 2024-08-15 14:07:42 auto_logger:154] 正在执行 my_method_1
[Dev  I 2024-08-15 14:07:42 auto_logger:144] END: MyClass.my_method_1
[Dev  I 2024-08-15 14:07:42 auto_logger:142] STA: MyClass.my_method_2
[User I 2024-08-15 14:07:44 auto_logger:159] 正在执行 my_method_2,参数: 5
[Dev  I 2024-08-15 14:07:44 auto_logger:144] END: MyClass.my_method_2
"""

3.代码说明

3.1 代码详情

import logging
import osimport colorlogCRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0class LoggerManager:def __init__(self, log_file='log.txt'):self.file_handler_formatter = '[%(name)s %(levelname)1.1s %(asctime)s %(module)s:%(lineno)d] %(message)s'self.console_handler_formatter = '%(log_color)s[%(name)s %(levelname)1.1s %(asctime)s %(module)s:%(lineno)d] %(log_color)s%(message)s'self.color_formatter = colorlog.ColoredFormatter(self.console_handler_formatter,datefmt='%Y-%m-%d %H:%M:%S',log_colors={'DEBUG': 'cyan','INFO': 'green','WARNING': 'yellow','ERROR': 'red','CRITICAL': 'bold_red'})# 设置日志文件路径self.log_file = os.path.join(os.getcwd(), log_file)# 控制台处理器(可选)self._dev_log_enabled = Falseself.console_handler = Noneself.user_logger = self._create_user_logger()self.dev_logger = self._create_dev_logger()def logfile(self, filename, mode='a', encoding=None, delay=False, errors=None):# 添加文件处理器file_handler = logging.FileHandler(filename, mode=mode, encoding=encoding, delay=delay, errors=errors)file_handler.setLevel(logging.DEBUG)formatter = logging.Formatter(self.file_handler_formatter, datefmt="%Y-%m-%d %H:%M:%S")file_handler.setFormatter(formatter)# 添加文件处理器self.user_logger.addHandler(file_handler)self.dev_logger.addHandler(file_handler)def _create_user_logger(self):logger_ = logging.getLogger('User')logger_.setLevel(logging.DEBUG)# 控制台处理器console_handler = colorlog.StreamHandler()console_handler.setLevel(logging.DEBUG)console_handler.setFormatter(self.color_formatter)logger_.addHandler(console_handler)return logger_@staticmethoddef _create_dev_logger():logger_ = logging.getLogger('Dev ')logger_.setLevel(logging.DEBUG)return logger_@propertydef dev_log_enabled(self):"""控制Dev记录器的控制台处理器的启用和禁用"""return self._dev_log_enabled@dev_log_enabled.setterdef dev_log_enabled(self, value):"""启用或禁用控制台处理器"""if value and not self._dev_log_enabled:# 如果请求启用并且当前未启用,则添加控制台处理器if self.console_handler is None:self.console_handler = colorlog.StreamHandler()self.console_handler.setLevel(logging.DEBUG)self.console_handler.setFormatter(self.color_formatter)self.dev_logger.addHandler(self.console_handler)elif not value and self._dev_log_enabled:# 如果请求禁用并且当前已启用,则移除控制台处理器self.dev_logger.removeHandler(self.console_handler)self._dev_log_enabled = valuedef set_log_level(self, level):"""设置 User 和 Dev 记录器的日志级别"""self.user_logger.setLevel(level)self.dev_logger.setLevel(level)for handler in self.user_logger.handlers:handler.setLevel(level)for handler in self.dev_logger.handlers:handler.setLevel(level)def debug(self, message, dev=False):logger_ = self.dev_logger if dev else self.user_loggerlogger_.debug(message, stacklevel=2)def info(self, message, dev=False):logger_ = self.dev_logger if dev else self.user_loggerlogger_.info(message, stacklevel=2)def warning(self, message, dev=False):logger_ = self.dev_logger if dev else self.user_loggerlogger_.warning(message, stacklevel=2)def error(self, message, dev=False):logger_ = self.dev_logger if dev else self.user_loggerlogger_.error(message, stacklevel=2)def critical(self, message, dev=False):logger_ = self.dev_logger if dev else self.user_loggerlogger_.critical(message, stacklevel=2)logger = LoggerManager()

3.2 使用说明

以下是 logging 模块中记录器、格式器、处理器、筛选器作用介绍:

组件主要作用
Logger- 日志记录器提供记录日志的接口,并将日志消息传递给 Handler
Handler-处理器将日志消息传递到指定的目标位置,如文件、控制台、网络等
Formatter-格式器定义日志消息的输出格式,包括时间戳、日志级别、消息内容等
Filter-筛选器控制哪些日志消息应该被记录或忽略,提供细粒度的日志控制
# 日志模块# 实例化;
logger = LoggerManager() # 为记录器添加文件处理器;不添加则不生成日志文件;
logger.logfile(filename="1.txt") # 设置log_level
logger.set_log_level(level=INFO)# 启用 Dev 记录器的控制台处理器;
# 为True的时候,控制台会打印属于 Dev 记录器的日志信息,反之则不打印;
logger.dev_log_enabled = True# dev参数默认为False;
# True表示该日志属于 Dev 日志记录器,反之表示该日志属于 User 记录器;
# 表示这条消息在logger.dev_log_enabled设置为False的时候,不会打印在系统终端;
logger.info('This is an info message', dev=True)logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
http://www.yidumall.com/news/45267.html

相关文章:

  • 做网站客户改来改去seo和sem的区别与联系
  • 做独立网站可以支付下单网站top排行榜
  • 永州做网站的公司爱站网关键词挖掘查询工具
  • 新的电商平台有哪些优化网站seo方案
  • wordpress 拍卖seo排名快速上升
  • 济南网站建设bajiujiu营销策划思路
  • 一个专门做标题的网站宁波网站建设制作报价
  • 保定网站建设求职简历怎样做自己的网站
  • 网站建设 甘肃表白网站制作
  • 深圳模具外贸网站建设危机公关
  • 西城区网站建设推广seo免费seo关键词优化服务
  • php企业网站系统网络推广服务
  • wordpress搭建过程seo权重优化软件
  • 网站怎么自适应seo排名优化代理
  • wordpress自定义格式西安分类信息seo公司
  • 室内设计效果图说明站长工具seo查询软件
  • 安徽省建设厅网站产品营销网站建设
  • 个性网页设计提升网页优化排名
  • 沈阳之道网站建设重庆seowhy整站优化
  • 怎么自己做直播网站宁波网络推广优化公司
  • 网站 禁止查看源码域名查询大全
  • 临沂河东建设局网站seo常用的工具
  • 做网站开发的笔记本配置如何进行电子商务网站推广
  • 个人网站前置审批项谷歌seo培训
  • 网站广告的优势域名搜索
  • 今日军事新闻头条打仗苏州seo关键词优化推广
  • 广州seo培训机构东莞seo优化公司
  • 网站建设公司利润分配推广app大全
  • 厦门app开发优化seo是什么意思
  • 万户 网站建设百度搜索风云榜电视剧