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

玉树电子商务网站建设哪家快域名注册信息怎么查

玉树电子商务网站建设哪家快,域名注册信息怎么查,湖州网站建设哪家公司好,四川公众项目咨询管理有限公司前言#xff1a;成熟的软件开发不可避免的要进行日志记录#xff0c;python内置模块logging提供了强大的日志记录能力#xff0c;本文将从多个角度#xff0c;由浅入深的介绍logging的常见使用方法和一些基本概念#xff0c;本此系列文章分为两篇#xff0c;本文为系列文…前言成熟的软件开发不可避免的要进行日志记录python内置模块logging提供了强大的日志记录能力本文将从多个角度由浅入深的介绍logging的常见使用方法和一些基本概念本此系列文章分为两篇本文为系列文章第一篇介绍实用logging模块进行基本的日志记录操作。本文主要都是直接使用 logging.xxxx() 的方式这是最简单初步的日志记录不涉及任何复杂的类和对象这些将会在下一篇文章中来说明。一、什么是日志记录所谓的日志记录就是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述比如每个事件发生时的数据都是不同的。开发者还会区分事件的重要性重要性也被称为 等级 或 严重性1.1 什么时候使用 Logging对于简单的日志使用来说日志功能提供了一系列便利的函数。它们是 debug()info()warning()error() 和 critical()。想要决定何时使用日志请看下表其中显示了对于每个通用任务集合来说最好的工具。你想要执行的任务此任务最好的工具对于命令行或程序的应用结果显示在控制台。print()这是我们自己常用的显示某一些信息直接打印结果但是比较低级在对程序的普通操作发生时提交事件报告(比如状态监控和错误调查)http://logging.info() 函数(当有诊断目的需要详细输出信息时使用 logging.debug() 函数)提出一个警告信息基于一个特殊的运行时事件warnings.warn() 位于代码库中该事件是可以避免的需要修改客户端应用以消除告警logging.warning() 不需要修改客户端应用但是该事件还是需要引起关注对一个特殊的运行时事件报告错误引发异常报告错误而不引发异常(如在长时间运行中的服务端进程的错误处理)logging.error(), logging.exception() 或 logging.critical() 分别适用于特定的错误及应用领域1.2 日志记录的5个等级日志功能应以所追踪事件级别或严重性而定。各级别适用性如下以严重程度递增级别何时使用DEBUG细节信息仅当诊断问题时适用。INFO确认程序按预期运行但是要提示一些相关的信息WARNING表明有已经或即将发生的意外例如磁盘空间不足。程序仍按预期进行但是会有警告可能出现什么错误。ERROR由于严重的问题程序的某些功能已经不能正常执行CRITICAL严重的错误表明程序已不能继续执行以及严重程度排序为debuginfowarningerrorcritical默认的级别是WARNING意味着只会追踪该级别以及该级别以上的事件当然我们可以更改日志配置重新设置默认值。另外我们需要查看所记录的日志一般日志输出会有两种形式所追踪事件可以以不同形式处理。最简单的方式是输出到控制台。另一种常用的方式是写入磁盘文件。默认情况下日志输出信息会显示在控制台上。下面也会以这两种方式来加以说明。1.3 logging模块初识二、logging模块的常规基础操作2.1 logging日志记录的基本配置函数原型如下该函数支持以下关键字参数。格式描述filename使用指定的文件名而不是 StreamHandler 创建 FileHandler。在需要将日志写入到日志文件的时候使用filemode日志文件的写入模式.默认的是a默认是追加的方式若要每一次都重新写入则使用wformat使用的指定格式字符串。datefmt时间格式的字符串styleIf format is specified, use this style for the format string. One of %, { or $ for printf-style, str.format() or string.Template respectively. Defaults to %.字符串的格式化方式的选择参考下面的style参数详解。level设置根记录器级别去指定 level.默认的是warning可以重新指定比如http://logging.INFO logging.DEBUG 等等streamUse the specified stream to initialize the StreamHandler. Note that this argument is incompatible with filename - if both are present, a ValueError is raised.后面用到了再说handlersIf specified, this should be an iterable of already created handlers to add to the root logger. Any handlers which dont already have a formatter set will be assigned the default formatter created in this function. Note that this argument is incompatible with filename or stream - if both are present, a ValueError is raised.后面用到了再说对basicConfig的调用应该在 debug、info等函数的前面。因为它被设计为一次性的配置只有第一次调用会进行操作随后的调用不会产生有效操作。2.2 将日志写入文件2.3 多个模块中使用日志记录如果你的程序包含多个模块这里有一个如何组织日志记录的示例:如果你运行 myapp.py 你应该在 myapp.log 中看到我们发现不同模块中所记录的日志信息都被保存到了同一个日志文件里面了。2.4 格式化输出以及记录相关的变量值到日志文件前面有文章专门介绍了python中的字符串格式化的几种方法包括使用百分号%、str.format、string.Template模板等方法可以参考前面的文章python字符串格式化深入详解四种方法所以要定义自己的字符串输出格式要记录相关的变量到字符串中我们可以这样做。要记录变量数据请使用格式字符串作为事件描述消息并将变量数据作为参数附加。 例如:如你所见logging日志记录的字符串格式化将数据合并到字符串中所采用的方式是 百分号% 的形式 但是如果我想要使用其他的字符串格式化的方法怎么办呢就需要通过指定style参数来决定了style的取值可以是三个即%:这是默认的即默认使用百分号%格式的字符串格式化方法{表示使用str.format()的字符串格式化方法$:表示使用string.Template的格式化方法 为什么是默认使用百分号 % 格式化工具呢主要是因为logging的出现时间比这两种格式化方法要早一些但是并不是说完全不支持现在完全有其他的方法让logging支持str.format()和string.Template()这些格式只需要设置不同的style参数值即可。 三、logging模块的格式化设置以及时间格式化当我们看之前的记录日志的时候我们发现记录的日志总是下面的格式如下即所谓的日志类别严重程度rootmessage这样的格式那么能不能进行更改呢这个自然是可以的怎么更改呢如下3.1 消息显示的格式设置——basicConfig的 format 参数要更改用于显示消息的格式你需要指定要使用的格式:这将输出请注意前面示例中出现的“root”已消失。对于可以出现在格式字符串中的全部内容你可以参考以下文档 LogRecord 属性 在后面的系列文章第二篇中还会深入探讨日志记录的高级主题来说明的。下面是常见的格式设置的字段标识%(asctime)s日志创建时的普通时间%(created)f日志创建时的时间由time.time()返回%(filename)s文件名%(funcName)s调用日志记录的函数%(levelname)s日志消息的文本级别%(levelno)s日志消息的数字级别%(lineno)d调用日志消息的行号%(msecs)d创建时间的毫秒部分%(message)s日志消息%(name)s日志器的名称%(pathname)s记录日志的源文件的路径名%(process)d进程ID%(processName)s进程名%(thread)d线程ID%(threadName)s线程名%(relativeCreated)d创建日志记录的时间以毫秒为单位借助于这些格式我们可以自定义日志记录比如显示时间这样日志中除了记录消息等级、消息信息外还会记录上消息创建的时间。3.2 设置日志记录的时间显示的格式——basicConfig的datefmt参数那我们可不可以更改时间显示的格式呢这个自然是能的日期/时间显示的默认格式如上所示类似于 ISO8601 或 RFC 3339 。 如果你需要更多地控制日期/时间的格式请为 basicConfig 提供 datefmt 参数需要格外注意的是datefmt 参数的格式与 time.strftime() 支持的格式相同。如下例所示:那到底有哪一些格式呢可以参考官网https://docs.python.org/zh-cn/3.7/library/time.html#time.strftime 函数原型为转换一个元组或 struct_time 表示的由 gmtime() 或 localtime() 返回的时间到由 format 参数指定的字符串。如果未提供 t 则使用由 localtime() 返回的当前时间。 format 必须是一个字符串。如果 t 中的任何字段超出允许范围则引发 ValueError 。0是时间元组中任何位置的合法参数如果它通常是非法的则该值被强制改为正确的值。以下指令可以嵌入 format 字符串中。它们显示时没有可选的字段宽度和精度规范并被 strftime() 结果中的指示字符替换指令含义注释%a本地化的缩写星期中每日的名称。%A本地化的星期中每日的完整名称。%b本地化的月缩写名称。%B本地化的月完整名称。%c本地化的适当日期和时间表示。%d十进制数 [01,31] 表示的月中日。%H十进制数 [00,23] 表示的小时24小时制。%I十进制数 [01,12] 表示的小时12小时制。%j十进制数 [001,366] 表示的年中日。%m十进制数 [01,12] 表示的月。%M十进制数 [00,59] 表示的分钟。%p本地化的 AM 或 PM 。(1)%S十进制数 [00,61] 表示的秒。(2)%U十进制数 [00,53] 表示的一年中的周数星期日作为一周的第一天作为。在第一个星期日之前的新年中的所有日子都被认为是在第0周。(3)%w十进制数 [0(星期日),6] 表示的周中日。%W十进制数 [00,53] 表示的一年中的周数星期一作为一周的第一天作为。在第一个星期一之前的新年中的所有日子被认为是在第0周。(3)%x本地化的适当日期表示。%X本地化的适当时间表示。%y十进制数 [00,99] 表示的没有世纪的年份。%Y十进制数表示的带世纪的年份。%z时区偏移以格式 HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示其中H表示十进制小时数字M表示小数分钟数字 [-23:59, 23:59] 。%Z时区名称如果不存在时区则不包含字符。%%字面的 % 字符。注释: 当与 strptime() 函数一起使用时如果使用 %I 指令来解析小时 %p 指令只影响输出小时字段。 范围真的是 0 到 61 值 60 在表示 leap seconds 的时间戳中有效并且由于历史原因支持值 61 。 当与 strptime() 函数一起使用时 %U 和 %W 仅用于指定星期几和年份的计算。下面是一个示例一个与 RFC 2822 Internet电子邮件标准以兼容的日期格式。 个人总结个人习惯使用的格式为年月日时分秒星期数如下四、日志记录的堆栈追踪前面都是一些最简单的日志记录操作与格式设置但是我们在编写python代码的时候往往涉及到多个函数之间的调用我们需要跟踪函数调用的堆栈信息这样才能定位到到底是哪一个函数的哪一个位置出现了错误这才更加合理。再次回顾日志记录实际上是做一件什么事即当满足什么条件的时候、或者是当某一件事情发生的时候开始记录日志明白这思想很重要现在我们要做的就是在程序执行出发了异常的时候就开始记录日志并且记录程序的堆栈信息思想是相通的只不过条件现在变成了在异常发生的时候。首先其实我们发现http://logging.xxx()的几个函数info、debug、warning、error、critical他们的参数格式是一样的以error为例有两个非常关键的参数它们是stack_info:exc_info:下面将分别来说明这两个参数各自的作用1exc_infoTrue——出现异常时记录堆栈调用信息先从一个简单的函数调用例子来看有一个math_func.py模块实现了两个函数如下然后有一个operation_func.py模块再进一步对这两个函数进行包装以便进行选择性的调用哪一个函数如下最后再主模块main.py里面进行调用如下运行之后打开日志文件得到如下的结果从上面我们发现错误信息以及堆栈信息全部清楚地记录在了里面。这对于程序调试是至关重要的。以上就是出现错误的时候logging堆栈追踪的全部实现一般的调用模板如下前面提到了由两个参数那么这两个参数到底有什么区别呢现总结如下exe_info参数在搜索异常处理程序时跟踪异常而打开的堆栈帧的信息这个是专门针对异常发生的时候记录日志的stack_info参数默认为 False。如果为 True则将堆栈信息添加到日志消息中包括实际的日志调用。请注意这与通过指定 exc_info 显示的堆栈信息不同他主要是从堆栈底部到当前线程中的日志记录调用的堆栈帧什么意思呢即使在未引发任何异常的情况下也可以显示如何到达代码中的特定点。堆栈帧在标题行即每一句日志记录行之后打印stack_info简单来说就是根据每一个日志记录语句所在的位置打印出这一句日志记录信息并且在后面显示这句日志记录所在的函数堆栈的位置是在哪里。2stack_infoTrue——记录每一句日志记录语句所在代码中的堆栈信息参考下面的例子调用b函数b中有调用a函数得到下面的日志信息从上面可以看出stack_info它会详细记录每一条日志打印语句所在的位置然后在日志信息后面加以显示这跟exe_info是有显著区别的。3补充参数说明——extra参数的说明前面的3.1中在说明日志记录的格式的时候给出了很多预先定义好的格式比如%(asctime)s日志创建时的普通时间%(created)f日志创建时的时间由time.time()返回%(filename)s文件名等等有时候我们想定义自己的信息怎么办呢可以采用下面的方式extra参数接受的参数是一个字典类型如下例子所示我们发现自己定义的clientip、user、work都显示了出来实际上上面的这种操作称之为向日志输出中添加上下文信息除了传递给日志记录函数的参数外有时候我们还想在日志输出中包含一些额外的上下文信息。比如在一个网络应用中可能希望在日志中记录客户端的特定信息如远程客户端的IP地址和用户名。这里我们来介绍以下几种实现方式通过向日志记录函数传递一个extra参数引入上下文信息使用LoggerAdapters引入上下文信息使用Filters引入上下文信息具体说明请参考博文 《Python之向日志输出中添加上下文信息》关于Python logging的更多高级用法请参考文档 Logging CookBook 。
http://www.zqtcl.cn/news/285029/

相关文章:

  • 装修网站怎么做的外贸谷歌推广怎么样
  • 建设部网站监理资质换证it外包 北京
  • flash网站制作公司杭州便宜的手机网站建设
  • 有ip地址如何做网站苏州门户网站建设
  • 菏泽北京网站建设邯郸做移动网站费用
  • 国外的平面设计网站施工企业介绍
  • 做网站市场价织梦模板自适应
  • xx单位网站建设方案设计精美的网站
  • 唐山市政建设总公司网站工商营业执照查询官网
  • 深圳建站模板建站网站介绍怎么写
  • 网站建设管理教程视频教程如何建一个电商平台
  • 深圳网络公司做网站wordpress怎么编辑网站
  • 淄博建站网络公司wordpress ldap外部登录认证
  • 南宁网站开发浏览器有哪几种
  • 石家庄哪里能制作网站网站301跳转
  • 网站建设报价浩森宇特wordpress怎样修改字体
  • 网站建设预估费用做品牌推广用什么网站
  • 网站建设风险评估西部数码 空间做2个网站
  • 专业购物网站建设wordpress the7不显示分类页
  • 移动应用开发网站建设网站时的故障分类
  • 网站动态静态软件项目管理案例教程第四版
  • 贵州萝岗seo整站优化鲜花店网站建设的总结
  • 下载做网站的软件建网站做站在
  • 无锡高端网站建设公司WordPress臃肿主题
  • 网站建设与运营财务预算seo下拉优化
  • 重庆铜梁网站建设价格阜城网站建设价格
  • 怎样建置换平台网站公众号开发周期
  • 朝阳建设网站什么是网络设计方案网络设计的原则有哪些
  • 长春商城网站制作二级网站建设 知乎
  • 网站建设的结论沭阳县建设局网站