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

网站开发费用成本表百度网站排名搜行者seo

网站开发费用成本表,百度网站排名搜行者seo,做电商网站需要会些什么条件,炫酷的个人网站python-日志模块以及实际使用设计 1. 基本组成 日志模块四个组成部分: 日志对象:产生日志信息日志处理器:将日志信息输出到指定地方,例如终端、文件。格式器:在日志处理器输出之前,对信息进行各方面的美化…

python-日志模块以及实际使用设计

1. 基本组成

日志模块四个组成部分:

  1. 日志对象:产生日志信息
  2. 日志处理器:将日志信息输出到指定地方,例如终端、文件。
  3. 格式器:在日志处理器输出之前,对信息进行各方面的美化。
  4. 过滤器:在日志处理器输出之前,将信息按照过滤器的条件过滤一遍。比如按照日志级别进行过滤。

日志本质上就是如下流程:

日志信息
日志信息
日志信息
日志信息
过滤的日志信息
过滤日志信息
格式的日志信息
格式的日志信息
日志对象
日志处理器1
日志处理器2
过滤器:过滤日志信息
过滤器:过滤日志信息
格式器:格式日志信息
格式器:格式日志信息
输出
输出

日志级别:

  1. logging.DEBUG,是个int数,等于10
  2. logging.INFO == 20
  3. logging.WARNING == 30
  4. logging.ERROR == 40
  5. logging.CRITICAL == 50
2. 基本使用-在终端打印日志

logging.StreamHandler将日志信息输出到终端上。

import logging # 1,创建日志对象
logger = logging.getLogger() # 2,设置日志对象级别,INFO以及INFO以上信息被输出。
# 本质上就是自己规定哪些信息属于INFO级别,比如正常运行的记录。
logger.setLevel(logging.INFO) # 3,创建日志处理器
# 将日志处理器加入到日志对象中,可以绑定多个。
# 绑定终端处理器,将日志信息输出到终端上。
stream_handler_1 = logging.StreamHandler()
stream_handler_2 = logging.StreamHandler()
logger.addHandler(stream_handler_1)
# 绑定第二个终端处理器。
logger.addHandler(stream_handler_2)# 4,日志对象产生日志信息
# 日志对象可以产生五种级别的日志信息。
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')
3. 基本使用-日志打印到文件

本质就是更换日志处理器,利用logging.FileHandler()将日志信息输出到文件内。

import logginglogger = logging.getLogger()
# 设置日志最低级别。
logger.setLevel(logging.INFO)# 绑定第一个文件处理器, 将日志信息输出到文件内。
file_handler = logging.FileHandler(filename='../logs/test.log', mode='a', encoding='utf8')
logger.addHandler(file_handler)
# 绑定第二个终端处理器,将日志信息输出到终端上。
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)# 日志对象产生日志信息
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')
4. 基本使用-使用格式器美化日志信息
  1. 创建方法:使用logging.Formatter()。
  2. 使用方法:处理器绑定格式器。通过setFormatter()方法进行绑定。
  3. 使用目的:日志信息需要提供功能:查看什么时间哪个文件的哪一行发生了什么情况。
import logginglogger = logging.getLogger()# 设置日志最低级别。
logger.setLevel(logging.INFO)# 绑定终端处理器
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)# 绑定文件处理器
file_handler = logging.FileHandler(filename='../logs/test.log', mode='a', encoding='utf8')
logger.addHandler(file_handler)# 创建格式器
# asctime:时间。
# levelname: 日志信息级别。
# filename: 输出日志信息代码所在的文件名称。
# lineno:输出语句所在文件的行数。
# message: 日志信息。
fmt = logging.Formatter('%(asctime)s - [%(levelname)s] - %(filename)s[%(lineno)d]:%(message)s')# 将格式器绑定到处理器上
stream_handler.setFormatter(fmt)
file_handler.setFormatter(fmt)# 日志对象产生日志信息
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')# 终端中会输出如下信息:
'''
2024-01-06 18:42:43,755 - [INFO] - 1.py[25]:这是一个info级别的日志信息
2024-01-06 18:42:43,756 - [WARNING] - 1.py[26]:这是一个warning级别的日志信息
2024-01-06 18:42:43,756 - [ERROR] - 1.py[27]:这是一个error级别的日志信息
2024-01-06 18:42:43,757 - [CRITICAL] - 1.py[28]:这是一个critical级别的日志信息
'''
5. 基本使用-使用过滤器过滤日志信息
  1. 创建方法:继承重写一下logging.Filter类的filter方法。
  2. 使用方法:处理器通过addFilter()方法绑定过滤器。
  3. 使用目的:一般情况都是按照日志级别进行过滤,目的在于对将不同级别的日志信息输出到不同的文件中,方便进行查看。
import logging# 1. 创建过滤器
class LogFilter(logging.Filter):def __init__(self, name, low_level=10, high_level=50):super().__init__(name=name)self.low_level = low_levelself.high_level = high_leveldef filter(self, record):return True if self.low_level <= record.levelno <= self.high_level else Falselogger = logging.getLogger()# 2. 设置日志最低级别。
logger.setLevel(logging.DEBUG)# 3. 绑定终端处理器
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
# 绑定文件处理器
file_handler = logging.FileHandler(filename='./test.log', mode='a', encoding='utf8')
logger.addHandler(file_handler)# 4. 创建格式器
fmt = logging.Formatter('%(asctime)s - [%(levelname)s] - %(filename)s[%(lineno)d]:%(message)s')
# 将格式器绑定到处理器上
stream_handler.setFormatter(fmt)
file_handler.setFormatter(fmt)# 5. 创建过滤器
normal_filter = LogFilter('normal', logging.DEBUG, 20)
nonormal_filter = LogFilter('nonormal', logging.WARNING, logging.CRITICAL)# 6. 终端处理器绑定正常过滤器
stream_handler.addFilter(normal_filter)# 7. 文件处理器绑定非正常过滤器
file_handler.addFilter(nonormal_filter)# 日志对象产生日志信息
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')# 终端中打印以下信息:
'''
2024-01-06 20:40:14,689 - [DEBUG] - 1.py[46]:这是一个debug级别的日志信息
2024-01-06 20:40:14,689 - [INFO] - 1.py[47]:这是一个info级别的日志信息
'''# 文件中打印以下信息
'''
2024-01-06 20:40:14,689 - [WARNING] - 1.py[48]:这是一个warning级别的日志信息
2024-01-06 20:40:14,689 - [ERROR] - 1.py[49]:这是一个error级别的日志信息
2024-01-06 20:40:14,689 - [CRITICAL] - 1.py[50]:这是一个critical级别的日志信息
'''
6. 进阶使用-日常工作中的日志模块设计

日常工作中日志模块设计思路:

  1. 使用时只需要配置日志文件存放地址就可以。
  2. 日志文件的存放时间间隔:每小时或者每天。
  3. 设置日志的输出级别。
  4. 在服务模块中,存放间隔、存放路径都可以放在配置文件中。
  5. 日志模块一般情况下放在工程中的util文件中。看自己习惯。

util/logger.py,设计如下,也可以按照自己的额外思路进行设计。

import logging
import time
import os# 一个logging.Logger()对象
class Logging:def __init__(self):self.logger = logging.getLogger()self.logger.setLevel(logging.INFO)# 一个自定义过滤器
class Filter(logging.Filter):def __init__(self, name, low_level, high_level):super().__init__(name=name)self.low_level = low_levelself.high_level = high_leveldef filter(self, record):return True if self.low_level <= record.levelno <= self.high_level else False# 主函数,从logger.py文件汇总引人get_logger函数
def get_logger(log_root_path, low_level=logging.INFO, high_level=logging.CRITICAL):logger = Logging().loggerlog_file_name = f"{time.strftime('%Y%m%d-%H', time.localtime())}.log"handler = logging.FileHandler(filename=os.path.join(log_root_path, log_file_name),mode='a',encoding='utf-8')fmt = logging.Formatter('%(asctime)s - [%(levelname)s] - %(filename)s[%(lineno)d]:%(message)s')filter = Filter('dev', low_level, high_level)handler.setFormatter(fmt)handler.addFilter(filter)logger.addHandler(handler)return loggerif __name__ == "__main__":# 正常情况下只需要输入日志路径即可。logger = get_logger('./')logger.info('这是一个测试')

文章转载自:
http://zareba.fcxt.cn
http://taa.fcxt.cn
http://reign.fcxt.cn
http://fatherhood.fcxt.cn
http://lobeline.fcxt.cn
http://nepaulese.fcxt.cn
http://glm.fcxt.cn
http://autoworker.fcxt.cn
http://handspike.fcxt.cn
http://papilionaceous.fcxt.cn
http://shirr.fcxt.cn
http://redactor.fcxt.cn
http://rurales.fcxt.cn
http://batik.fcxt.cn
http://reparation.fcxt.cn
http://blastosphere.fcxt.cn
http://slumber.fcxt.cn
http://dilatant.fcxt.cn
http://fibrose.fcxt.cn
http://freestanding.fcxt.cn
http://aciculignosa.fcxt.cn
http://produce.fcxt.cn
http://angiocarp.fcxt.cn
http://iconic.fcxt.cn
http://afternooner.fcxt.cn
http://deplorably.fcxt.cn
http://tamboo.fcxt.cn
http://electronarcosis.fcxt.cn
http://viking.fcxt.cn
http://monogyny.fcxt.cn
http://reappraise.fcxt.cn
http://intromit.fcxt.cn
http://unrivaled.fcxt.cn
http://payor.fcxt.cn
http://ecr.fcxt.cn
http://elegancy.fcxt.cn
http://ligularia.fcxt.cn
http://phenomenalise.fcxt.cn
http://shipload.fcxt.cn
http://uther.fcxt.cn
http://mace.fcxt.cn
http://chunder.fcxt.cn
http://mimicker.fcxt.cn
http://gobbledygook.fcxt.cn
http://slipstream.fcxt.cn
http://topicality.fcxt.cn
http://depraved.fcxt.cn
http://iconicity.fcxt.cn
http://rotiferous.fcxt.cn
http://medaled.fcxt.cn
http://picotee.fcxt.cn
http://histoplasmosis.fcxt.cn
http://rynd.fcxt.cn
http://comeback.fcxt.cn
http://monovalent.fcxt.cn
http://precatory.fcxt.cn
http://unconfiding.fcxt.cn
http://disoperation.fcxt.cn
http://wintergreen.fcxt.cn
http://clonus.fcxt.cn
http://waxweed.fcxt.cn
http://intermingle.fcxt.cn
http://exaggerator.fcxt.cn
http://galvanography.fcxt.cn
http://arabization.fcxt.cn
http://smacksman.fcxt.cn
http://programmable.fcxt.cn
http://screenwiper.fcxt.cn
http://xerophilous.fcxt.cn
http://uncannily.fcxt.cn
http://desoxyribose.fcxt.cn
http://aeromagnetics.fcxt.cn
http://assess.fcxt.cn
http://lipizzaner.fcxt.cn
http://fab.fcxt.cn
http://tenantship.fcxt.cn
http://si.fcxt.cn
http://quartan.fcxt.cn
http://privy.fcxt.cn
http://lenitic.fcxt.cn
http://ensorcel.fcxt.cn
http://forgettable.fcxt.cn
http://telukbetung.fcxt.cn
http://afoul.fcxt.cn
http://fleming.fcxt.cn
http://forbearance.fcxt.cn
http://spurrier.fcxt.cn
http://erinaceous.fcxt.cn
http://anytime.fcxt.cn
http://iotp.fcxt.cn
http://favorable.fcxt.cn
http://ovir.fcxt.cn
http://triphase.fcxt.cn
http://alep.fcxt.cn
http://mec.fcxt.cn
http://plastral.fcxt.cn
http://stakhanovism.fcxt.cn
http://ottawa.fcxt.cn
http://pamlico.fcxt.cn
http://desponding.fcxt.cn
http://www.hrbkazy.com/news/93290.html

相关文章:

  • 东西湖网站建设公司友情链接检查
  • 东莞茶山网站建设上往建站
  • 如何保存自己做的网站关键词推广优化app
  • 石家庄哪里有做外贸网站的公司百度竞价什么意思
  • 网络营销就业方向seo是指什么岗位
  • 贵州做旅游的网站百度站长号购买
  • 网站域名注册商标有什么好处互联网营销方案策划
  • 怎么修改网站后台权限快速排名软件案例
  • 网站开发建设需多少钱怎么在网上推销产品
  • 手机端网站开发多少钱西安seo技术培训班
  • 手机免费制作ppt的软件下载公司seo排名优化
  • php个人网站论文做电商需要学哪些基础
  • 装修网站效果图四川seo推广方案
  • 网站关键词最多几个廊坊seo整站优化
  • 移动端网站案例企业营销策划合同
  • 网站子目录怎么做的西安抖音seo
  • 企业建设网站的策划流程百度广告联盟网站
  • jsp动态网站开发与实例网络销售推广平台
  • 为爱表白网页设计模板素材百度排名优化专家
  • 网站建设合同内容太原seo顾问
  • 网站备案流程何时改重庆网络推广外包
  • 镇江新区江门搜狗网站推广优化
  • 衡水网站排名优化公司网站流量统计系统
  • 微信网站建设电话seo优化专员编辑
  • 网站不兼容360浏览器网络关键词优化软件
  • 电子政务与网站建设的经验可以发广告的平台
  • 网站建设登录界面设计步骤天津seo管理平台
  • 做网站设像素企拓客软件怎么样
  • 潍坊网站制作江门公司重庆关键词自然排名
  • 如何建设赌博网站营销方案推广