python学习之-- logging模块
logging模块
功能:提供了标准的日志接口,可以通过它存储各种格式的日志。
日志5个级别分:debug(),info(),warning(),error(),critical() logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略 简单示例:5种日志打印和顺序
import logging
logging.debug('mess')
logging.info('mess')
logging.warning('user warnning log info')
logging.error('error')
logging.critical('server is down')
输出critical的日志如下:
CRITICAL:root:server is down
举例:日志记录到文件中
import logging
#打开记录日志文件并设定日志写入级别为info以上,设定日志文件格式,开头是时间,然后是日志信息
logging.basicConfig(filename='example.log',
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%m%d%Y %I:%M:%S %p')
logging.info('mess')
logging.warning('warning')
logging模块记录日志涉及4个类:
1:logger提供了应用程序可以直接使用的接口
2:handler将(logger创建的)日志记录发送到合适的目的输出。
3:filter提供了细度设备来决定输出哪条日志记录
4:formatter决定日志记录的最终输出格式。
另:logging 有2种方式可以切割日志(根据时间 或者 根据大小 )
logger:每个程序在输出信息之前都要获得一个logger,logger通常对应了程序的模块名。如:
LOG = logging.getLogger('access.log')
而核心模块可以这样:
LOG = logging.getLogger('chat.kernel')
Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug为最低,critical为最高。
Logger.addFilter(filt),Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr),Logger.removeHandler(hdlr):添加或删除指定的handler
Logger.debug(),Logger.Info(),Logger.Warning(),Logger.error(),Logger.critical() 为可以设定的日志级别。 handler:负责把信息发送到指定的目的地,如:控制台,文件,网络或者编写自己的handler。通过addHandler()添加多个handler
Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的被忽略。
Handler.setFormatter():给一个handler选择一个格式。
Handler.addFilter(filt),Handler.removeFilter(filt):新增/删除一个filter对象。
以下为常用的handler:
1:logging.StreamHandler:就是屏幕输出
2:logging.FileHandler:输出到文件
3:logging.handlers.RotatingFileHandler:可以管理文件大小,当达到指定大小后,会自动对当前文件改名。改为:文件名.1,.2,.3这样
格式为:RotatingFileHandler(filename[,mode[,maxBytes[,backupCount]]])
参数:maxBytes 是文件大小,0为无限大。backupCount:保留的备份文件个数。
4:logging.handlers.TimeRotatingFileHandler:按照时间切割日志
格式为:TimeRotatingFileHandler(filename,[,when[,interval[,backupCount]]])
参数:interval 时间间隔
when 是个字符串,时间间隔的单位有(S秒,M分,H小时,D天,W星期,midnight每天凌晨)
日志基本流程图

举例:实现日志的屏幕和文件输出
import logging
#自定义日志名字test-log
logger = logging.getLogger('test-log')
#设置最低日志级别DEBUG
logger.setLevel(logging.DEBUG) #添加一个handler到屏幕输出
ch = logging.StreamHandler()
#屏幕输出自定义级别为WARNING
ch.setLevel(logging.WARNING) #在添加一个handler输出到文件
fh = logging.FileHandler('access.log',encoding='utf-8')
fh.setLevel(logging.ERROR) # 在定义日志输出的格式(这个定义为到文件格式)
fh_formatter = logging.Formatter('%(asctime)s%(process)d %(filename)s - %(levelname)s - %(message)s')
# 这个定义为屏幕打印格式
ch_formatter = logging.Formatter('%(asctime)s, - %(name)s - %(levelname)s - %(message)s') #接下来将自定义的日志格式和handler关联起来
#关联文件handler
fh.setFormatter(fh_formatter)
#关联屏幕handler
ch.setFormatter(ch_formatter) #最后将定义好的handler关联到logger,日志通过logger输出
logger.addHandler(fh)
logger.addHandler(ch) #到现在,就可以做输出日志进行测试
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
举例:按照文件大小或者时间切割日志
import logging
from logging import handlers
logger = logging.getLogger(__name__)
log_file = 'logname.log'
#按照文件大小切割日志
# fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3,encoding='utf-8')
#按照文件时间切割日志,这里的 'S' 表示秒
# fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3,encoding='utf-8') formatter = logging.Formatter('%(asctime)s %(module)s %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
python学习之-- logging模块的更多相关文章
- python 学习笔记 -logging模块(日志)
模块级函数 logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root loggerlogging.debug().logging.info().lo ...
- python学习-57 logging模块
logging 1.basicConfig方式 import logging # 以下是日志的级别 logging.debug('debug message') logging.info('info ...
- python学习之logging模块
Logger.setLevel(level) 设置记录器的级别为level.低于该级别的信息将被忽略. 记录器默认级别为NOTSET.如果记录器是根记录器,则默认将记录所有信息: 如果是一个非根记录器 ...
- Python自建logging模块
本章将介绍Python内建模块:日志模块,更多内容请从参考:Python学习指南 简单使用 最开始,我们用最短的代码体验一下logging的基本功能. import logging logger = ...
- Python中的logging模块就这么用
Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...
- python中日志logging模块的性能及多进程详解
python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...
- Python日志输出——logging模块
Python日志输出——logging模块 标签: loggingpythonimportmodulelog4j 2012-03-06 00:18 31605人阅读 评论(8) 收藏 举报 分类: P ...
- Python学习 Part4:模块
Python学习 Part4:模块 1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用.模块中的定义可以被导入到其他模块或者main模块. 模块就是一个包含Python定义 ...
- python学习之argparse模块
python学习之argparse模块 一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行 ...
随机推荐
- android studio 生成 jniLibs 目录
现在一般的项目都会加入第三方jar包,第三方jar包我们会新建一个文件夹:libs,然后jar包都放在这个文件夹中. 但我们会发现,只是新建一个文件加之后,在AndroidStudio的左侧并不会出现 ...
- rabbitmq的知识点
rabbitmq,分为集群和主从2种. 主从式与集群式的速度差10倍. 每个rabittmq组需要3台机器. 集群式,稳定性高,主从式,速度快. 可以做任务分配,单点锁(二进制树实现). 只有当消息和 ...
- casting in C++
这是2013年写的一篇旧文,放在gegahost.net上面 http://raison.gegahost.net/?p=39 February 20, 2013 casting in C++ Fil ...
- iOS开发内购全套图文教程
2015年最全的内购图文教程,首先是填各种资料,最后是代码,废话不多说,直接上图 ======================第一部分协议=============== 第一步 第二步 第三步 第四步 ...
- WPF知识点全攻略00- 目录
知识点目录如下: 1.WPF相对WinFrom的优缺点 2.WPF体系结构 3.XAML 4.XAML页面布局 5.XAML内容控件 6.WPF中的“树” 7.Binding 8.依赖属性 9.附加属 ...
- New Arrival MB SD Connect Compact 5 (MB SD C4) Star Diagnosis
MB SD Connect Compact 5 has same function as SD C4 but with new design, support both cars and trucks ...
- [BZOJ2120]:数颜色(分块?)
题目传送门 我感觉这种题没必要扯淡题目大意了,没啥用. 暴力过掉,擦了个边. 主要是讲一下这道题我用到的卡常. 首先,0,1标记我用的位运算,位运算符跑的要比正常的+,-,×,÷,true,false ...
- pm2 start命令中的json格式详解
pm2 start npm -- start这条命令是pm2的万能命令,pm2 start <json>,就是这一系列命令中的最豪华命令.这个json我们可以理解为一个任务参数描述文件.通 ...
- 最小生成树 Prim算法 Kruskal算法实现
最小生成树定义 最小生成树是一副连通加权无向图中一棵权值最小的生成树. 在一给定的无向图 G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即,而 w(u, v) 代表此边的 ...
- Jenkins出现 {"changed": false, "msg": "mkdir: cannot create directory ‘/root/.ansible/tmp/ansible-tmp-1552390265.8-253945919613076’: No space left on device\n", "unreachable": true}
之前部署Jenkins没有遇到过这个问题,百度也找不到相关内容,无奈用过google翻译了一下,显示内存不足,上到服务器查询df -h 发现use% 100% 由于日志等文件导致服务器磁盘空间满了,引 ...