一. logging模块

  用来记录日志,日志:记录某个时间点发生了什么事

  日志作用:程序调试

       了解软件程序的运行情况,是否正常

       软件程序运行故障分析与问题定位

       还可用来做用户行为分析

  日志等级:在不改动应用程序代码的情况下,实现在不同的环境记录不同详细程度的

       1. DEBUG=10   最详细的日志,应用场景为问题诊断

       2. INFO=20    通常只记录关键节点信息,用于确认一切是按照预期那样进行

       3.WARNING=30    记录一些不期望发生的事情的信息,程序可正常运行

       4. ERROR=40    由于一个严重的问题导致某些功能不能正常运行时记录的信息

       5.CRITICAL=50   当发生严重错误,导致应用程序不能继续运行时记录的信息

  日志等级排序: DEBUG<INFO<WARNING<ERROR<CRITICAL

  一条日志信息应该包括的内容: 发生时间/ 发生的位置/ 事情的严重程度(日志级别)/ 事件内容

  为某个程序制定日志级别后,应用程序会记录所有日志级别>= 制定日志级别的日志信息,同时,logging模块也可以指定日志记录器的日志级别,只有级别>= 指定日志级别的日志记录才会被输出,低等级的日志记录会别丢弃

  logging 模块提供两种记录日志的方式:

    第一种: 使用logging提供的模块级别的函数

    第二种: 使用logging日志系统的四大组件

  logging模块定义的模块级别的常用函数:

    logging.debug(msg,*args,**kwargs)  创建一条等级为DEBUG的日志记录

    logging.info(msg,*args,**kwargs)   创建一条严重级别为INFO的日志记录

    logging.warning(msg,*args,**kwargs)  创建一条严重级别为warning的日志记录

    logging.error(msg,*args,**kwargs)  创建一条严重界别为error的日志记录

    logging.critical(msg,*args,**kwargs) 创建一条严重级别为CRITICAL的日志记录

    logging.log(level,*args,**kwargs)  创建一条严重级别为level的日志记录

    logging.basicConfig(**kwargs)   对root logger 进行一次性配置(用于指定“要记录的日志级别”,日志输出位置,日志文件的打开模式)

  logging模块的四大组件:

    loggers: 提供应用程序代码直接使用的接口

    handlers: 用于将日志记录发送到指定的目的位置

    filters:用于决定哪些日志记录将会被输出

    formatters:用于控制日志信息的最终输出格式

  四大组件之间的关系:

    日志器: 需要通过处理器(handler)将日志信息输出到目标位置

    不同的处理器可以将日志输出到不同的位置

    不同的日志器可以设置多个处理器 将同一条日志记录到不同的位置

    每个处理器都可以设置自己的格式器

    总结: 日志器是入口, 处理器处理,处理器可以通过过滤器和格式器做过滤和格式化处理

Logger类
Logger对象有3个任务要做: )向应用程序代码暴露几个方法,使应用程序可以在运行时记录日志消息;
)基于日志严重等级(默认的过滤设施)或filter对象来决定要对哪些日志进行后续处理;
)将日志消息传送给所有感兴趣的日志handlers。
Logger对象最常用的方法分为两类:配置方法 和 消息发送方法 最常用的配置方法如下: 方法 描述
Logger.setLevel() 设置日志器将会处理的日志消息的最低严重级别
Logger.addHandler() 和 Logger.removeHandler() 为该logger对象添加 和 移除一个handler对象
Logger.addFilter() 和 Logger.removeFilter() 为该logger对象添加 和 移除一个filter对
Handler类
Handler对象的作用是(基于日志消息的level)将消息分发到handler指定的位置(文件、网络、邮件等)。Logger对象可以通过addHandler()方法为自己添加0个或者更多个handler对象。比如,一个应用程序可能想要实现以下几个日志需求: )把所有日志都发送到一个日志文件中;
)把所有严重级别大于等于error的日志发送到stdout(标准输出);
)把所有严重级别为critical的日志发送到一个email邮件地址。
这种场景就需要3个不同的handlers,每个handler复杂发送一个特定严重级别的日志到一个特定的位置。
一个handler中只有非常少数的方法是需要应用开发人员去关心的。对于使用内建handler对象的应用开发人员来说,似乎唯一相关的handler方法就是下面这几个配置方法: 方法 描述
Handler.setLevel() 设置handler将会处理的日志消息的最低严重级别
Handler.setFormatter() 为handler设置一个格式器对象
Handler.addFilter() 和 Handler.removeFilter() 为handler添加 和 删除一个过滤器对象
import logging

logging.debug('This is a debug log.')
logging.warning('this is a warning log.') # 相当于 logging.log(logging.DEBUGE, 'this is a debug log.')
logging.log(logging.WARNING,'this is a warnging log.') # 输出结果 WARNING:root:This is a warning log. # 重点: 当没有提供任何配置信息的时候,这些函数都会去调logging.basicConfig(**kwargs) 且不会向该方法传递任何参数

 

Formater类
Formater对象用于配置日志信息的最终顺序、结构和内容。与logging.Handler基类不同的是,应用代码可以直接实例化Formatter类。另外,如果你的应用程序需要一些特殊的处理行为,也可以实现一个Formatter的子类来完成。 Formatter类的构造方法定义如下: logging.Formatter.__init__(fmt=None, datefmt=None, style='%')
可见,该构造方法接收3个可选参数: fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"
style:Python .2新增的参数,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'

  logging.basicConfig() 函数参数说明:

    filename: 指定日志输出目标文件的文件名,指定该设置项后日志信心就不会被输出到控制台了

    filemode: 指定日志文件的打开模式,默认为'a'。需要注意的是,该选项要在filename指定时才有效

    format: 指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序

    datefmt: 指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效

    level: 指定日志器的日志级别

    stream: 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。stream和filename不能同时提供,否则会引发 ValueError异常

    style:指定format格式字符串的风格,可取值为'%'、'{'和'$',默认为'%'

    handlers: 它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。注意:filename、stream和handlers这三个配置项只能有一个存在

  format 格式:

    

字段/属性名称 使用格式 描述
asctime %(asctime)s 日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896
created %(created)f 日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值
relativeCreated %(relativeCreated)d 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
msecs %(msecs)d 日志事件发生事件的毫秒部分
levelname %(levelname)s 该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
levelno %(levelno)s 该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
name %(name)s 所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger
message %(message)s 日志记录的文本内容,通过 msg % args计算得到的
pathname %(pathname)s 调用日志记录函数的源码文件的全路径
filename %(filename)s pathname的文件名部分,包含文件后缀
module %(module)s filename的名称部分,不包含后缀
lineno %(lineno)d 调用日志记录函数的源代码所在的行号
funcName %(funcName)s 调用日志记录函数的函数名
process %(process)d 进程ID
processName %(processName)s 进程名称,Python 3.1新增
thread %(thread)d 线程ID
threadName %(thread)s 线程名称
#配置日志输出
import logging
logging.basicConfig(level=logging.DEBUG LGO_FORMAT='%(asctime)s-%(levelname)s-%(message)s'
DATE_FORMAT='%m/%d/%Y %H:%M:%S %p'
logging.basicConfig(filename='mylog', level=logging.DEBUG,format=LOG_FORMAT, datefmt=DATE_FORMA

二. shelve 模块

  用来序列化模块,只有一个open函数,用open打开一个文件当做字典来使用,自动完成序列化

  支持python的所有基础数据类型,只能被python使用

  无法跨平台使用,当程序是单机程序时可用

s=shelve.open('test.she')
s['name']='egon' # 打开文件,默认为一个字典,为字典增加键值对,自动将写入的内容序列化 s=shelve.open('test.she')
print(s['name']) # 打开文件,直接取文件中内容

三. sys 模块

  system: 表示解释器                   os(operation system) 表示操作系统

  sys.argv  ===>  接收的是操作系统调用解释器时传入的参数(开发一款不带界面的程序,只能在终端(cmd)应用

  print(sys.srgv)  ===> 默认为文件的路径

  sys.argv 

# 需求: 开发一个基于cmd的复制文件的工具
# sys.argv 接收参数
# 参数1:被执行的py文件
# 参数2: 源文件路径
# 参数3: 目标文件路径

  sys.exit(0)   0 表示正常退出

  sys.version  表示解释器版本

  sys.platform  表示系统

模块之 logging, shelve, sys 模块的更多相关文章

  1. [xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]

    [xml模块.hashlib模块.subprocess模块.os与sys模块.configparser模块] xml模块 XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数 ...

  2. Python日志(logging)模块,shelve,sys模块

    菜鸟学python第十七天 1.logging 模块 logging模块即日志记录模块 用途:用来记录日志 为什么要记录日志: 为了日后复查,提取有用信息 如何记录文件 直接打开文件,往里写东西 直接 ...

  3. python3 json、logging、sys模块

    json模块 import json dic = {'name':'egon','age':32} # ------------------------------>序列化 f = open(' ...

  4. python标准模块(os及sys模块)

    一.os模块 用于提供系统级别的操作 os.getcwd() 获取当前工作目录 os.stat('path/filename') 获取文件/目录信息,其中包括文件大小等 os.sep 获得操作系统特定 ...

  5. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  6. python 常用模块之random,os,sys 模块

    python 常用模块random,os,sys 模块 python全栈开发OS模块,Random模块,sys模块 OS模块 os模块是与操作系统交互的一个接口,常见的函数以及用法见一下代码: #OS ...

  7. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块

    一.前提介绍: 可以开辟作用域的只有类,函数,和模块            for循环 if,else: 不能开辟自己的作用域 避免程序复用和重复调用,将这些写到一个.py文件中,做成一个模块,进行调 ...

  8. python模块--json \ pickle \ shelve \ XML模块

    一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...

  9. python 全栈开发,Day27(复习, defaultdict,Counter,时间模块,random模块,sys模块)

    一.复习 看下面一段代码,假如运行结果有问题,那么就需要在每一步计算时,打印一下结果 b = 1 c = 2 d = 3 a = b+c print(a) e = a + d print(e) 执行输 ...

  10. sys模块python

    sys模块 1: sys是python自带模块. 利用 import 语句输入sys 模块. 当执行import sys后, python在 sys.path 变量中所列目录中寻找 sys 模块文件. ...

随机推荐

  1. 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 大概就是维护两个标记的线段树模板题. 设定优先级,先乘后加(只是相对的),$push ...

  2. python3 items() 与 python2 中iteritems()的区别

    在Python2.x中, iteritems() 用于返回本身字典列表操作后的迭代 Python 3.x 里面, iteritems() 方法已经废除了,而 items() 得到的结果是和 2.x 里 ...

  3. jsp技术和el表达式和jstl技术

    注:本文参考黑马视频的讲义 jsp技术 1.jsp脚本 )<%java代码%> ----- 内部的java代码翻译到service方法的内部 )<%=java变量或表达式> - ...

  4. ABP的配置 请求类型

    1.ServerRootAddress 项目运行的根地址   需要跟启动项目配置的地址相同 2.CorsOrigins 允许哪些地址访问 不会出现跨域 启动项目配置的地址

  5. 虹软2.0免费离线人脸识别 Demo [C++]

    环境: win10(10.0.16299.0)+ VS2017 sdk版本:ArcFace v2.0 OPENCV3.43版本 x64平台Debug.Release配置都已通过编译 下载地址:http ...

  6. 学习笔记15—Python 存储集

    1. save using pickle      with open('F:/BrainAging/result/ordered_data_final_just_TD_leaveOne.pickle ...

  7. mysql 安装成功以及第一次安装成功初始化密码操作

    一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 环境变量   新建 变量 ...

  8. dockerfile debian 和pip使用国内源

    python官方镜像是基于debian的.国内使用时定制一下,加快下载速度. 1 debian本身使用国内源 dockfile中: #国内debian源 ADD sources.list /etc/a ...

  9. Lua报错:invalid key to 'next'

    1.问题产生的原因是,在一个循环里对table中的元素先进行置空操作,再进行增加新元素的操作,就会报这个错误. 2.比如下面的例子:(当中间的函数足够复杂并进行封装了的情况下,不会留意到存在这个问题) ...

  10. idea maven环境下 java实现发送邮件验证

    1.开通smtp授权 QQ邮箱-设置-账户-开启 得到一个授权码 2.下载javax.email包 maven项目中 pom文件加入: <dependency> <groupId&g ...