Python模块:logging、
- logging模块:
很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误、警告等信息输出。Python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志。logging的日志可以分为debug()、info()、warning()、error() and critical()5个级别(按顺序,级别越来越高)。
最简单的用法:
- import logging
- logging.warning('User [neo] attempted wrong password more than 3 times')
- logging.critical('server is down')
- # 运行结果: # 跟print没啥区别
- # WARNING:root:User [neo] attempted wrong password more than 3 times
- # CRITICAL:root:server is down
日志级别:
把日志写到文件里:
- import logging
- logging.basicConfig(filename='logging_test.log',level=logging.INFO) # Do basic configuration for the logging system. # level=logging.INFO的意思是:只有日志是INFO或者比INFO级别更高的日志才会被记录在文件里 # 记录日志时,只会接着以前的日志继续记录,不会把以前的记录覆盖掉。
- logging.debug('debug test')
- logging.info('INFO info')
- logging.warning('Warning!')
- # 运行结果: 把logging.info和logging.warning记录在了 ‘logging_test.log’(.log的后缀名)这个文件里。 # 这种情况下屏幕上没打印,即 没有输出到屏幕
- # 如下所示:
- # INFO:root:INFO info
- # WARNING:root:Warning!
把时间加到日志里面:
- import logging
- logging.basicConfig(filename='logging_with_time.log',
- level=logging.INFO,
- format='%(asctime)s %(message)s',
- datefmt='%Y-%m-%d %H:%M:%S') # 注意里面的参数‘format’和‘datefmt’
- logging.debug('debug test')
- logging.info('INFO info')
- logging.warning('Warning!')
- # 运行结果: INFO及其以上级别写入了‘logging_with_time.log’文件里面
- # 如下所示:
- # 2018-02-09 11:37:11 INFO info
- # 2018-02-09 11:37:11 Warning!
除了加时间,还可以自定义其他的格式,下表就是所有支持的格式:
logging进阶:日志同时输出到屏幕和文件:
Python使用logging模块记录日志涉及四个主要的类:
- logger提供了应用程序可以直接使用的接口
- handler将(logger创建的)日志记录发送到合适的目的输出
- filter提供了细度设备来决定输出哪条日志记录
- formatter决定日志记录的最终输出格式
它们之间的关系如下:
logger:
每个程序在输出信息之前都要先获得一个logger,如:
- import logging
- # 生成 logger 对象
- logger = logging.getLogger('web') # logger通常对应了程序的模块名
- # 对logger对象设置Level级别,如设置成INFO级别
- logger.setLevel(logging.INFO) # 利用logger.setLevel()对生成的logger对象设置级别, logging.INFO是把级别具体设置成INFO,如果你不设置,系统会默认把Level设置成WARNING。 # 对logger对象设置level的作用: logger。setLevel()相当于一个全局变量,所需要输出的日志需要先经过logging.getLogger生成logger对象,所以生成logger对象之前,会先检测所输出的日志级别是否符合logger.setLevel的级别,如果符合则生成logger对象;如果不符合则直接忽略、不生成logger对象。 举例说明: 有两个需要输出的日志: logger.debug('test debug') 和 logger.info('test info') , 执行这两句代码的时候, 由于我已经给生成logger设置了level --- INFO:logger.setLevel(logging.INFO) ,debug的level低于INFO, 所以 logger.debug('test debug') 不会生成logger对象,但 logger.info('test info') 则会生成logger对象(相当于第一步生成logger对象时过滤了一部分数据)
handler:
handler负责发送相关的信息到指定目的地。 Python日志系统有多种handler可以使用。可以把信息输出到控制台(屏幕),也可以把信息输出到文件,把信息发送到网络上。自己也可以编写自己的handler。
每个logger可以附加多个handler。常用的handler如下:
- logging.StreamHandler # 使用这个handler可以向类似于sys.stdout 或者 sys.stderr 的任何文件对象(file object)输出信息(往屏幕上输出)
- logging.FileHandler 和 StreamHandler类似, 用于向一个文件输出日志信息,不过FileHandler会帮你打开这个文件(往文件中输出)
- 还有两种用法:一是根据文件大小截断;二是根据时间interval截断。 详情参考: https://www.luffycity.com/python-book/di-4-zhang-python-ji-chu-2014-chang-yong-mo-kuai/logging-mo-kuai.html
用法如下:
- # 生成logger对象之后,再生成handler对象,然后把handler绑定到logger上
- # 生成handler对象
- ch = logging.StreamHandler() # 负责往屏幕发送的handler(发送到屏幕,所以括号里面为空)
- fh = logging.FileHandler('web.log') # 负责往文件“web.log”发送的handler # 日志文件的后缀名: .log
- # 把生成的handler对象绑定到logger对象
- logger.addHandler(ch) # 把ch这个handler对象绑定到logger上
- logger.addHandler(fh) # 把fh这个handler对象绑定到logger上
- # 设置handler的level
- ch.setLevel(logging.INFO) # 把ch这个handler对象的level设置成INFO
- fh.setLevel(logging.WARNING) # 把fh这个handler对象的level设置成WARNING
- # 关于设置handler的level,道理跟logger的level设置类似,即: 如果你不设置, 程序会默认level是WARNING;通过这一步设置的level能够再次“过滤”数据
- # 关于logger设置的level和handler设置的level,按照哪个level呢? 效果上可以这么理解: 所需要输出的日志(如: logger.warning(xx)), 先经过logger设置的level“过滤”,然后在生成handler对象这一步, 再次经过这一步的level“过滤”:level符合,则生成相应的handler;level不符合则忽略、不生成handler对象。
formatter组件:
日志的formatter是个独立的组件,可以跟handler组合, 用于设置所要发送的信息以什么样的格式发送到目的地。
用法:
- # 生成handler对象之后,再生成formatter对象,然后将formatter对象和handler绑定
- # 生成formatter对象
- console_fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(message)s') # 利用上面的logger名字表
- file_fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- # 把formatter对象绑定到handler
- ch.setFormatter(console_fmt)
- fh.setFormatter(file_fmt)
下面把上述的代码拼接到一起看效果:
- import logging
- # 生成logger对象
- logger = logging.getLogger('web')
- logger.setLevel(logging.INFO)
- # 生成handler对象
- ch = logging.StreamHandler()
- fh = logging.FileHandler('web.log')
- # 设置level
- ch.setLevel(logging.DEBUG)
- fh.setLevel(logging.WARNING)
- # 把handler绑定在logger上
- logger.addHandler(ch)
- logger.addHandler(fh)
- # 生成formatter对象
- console_fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(message)s')
- file_fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # %(name)s 这个name就是生成logger时括号里面的‘web’
- # 把formatter绑定到handler
- ch.setFormatter(console_fmt)
- fh.setFormatter(file_fmt)
- logger.debug('debug test')
- logger.info('info test')
- logger.warning('warning test')
- logger.error('error test')
- logger.critical('critical test') # 输出的日志
filter的用法参考: https://www.luffycity.com/python-book/di-4-zhang-python-ji-chu-2014-chang-yong-mo-kuai/logging-mo-kuai.html
Python模块:logging、的更多相关文章
- python模块 ---logging模块
摘要by crazyhacking: 与log4cxx一样,分为三个部分,logger, handler,formatter. 详细内容参考:1官网http://docs.python.org/2/h ...
- Python模块——logging模块
logging模块简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块, 由标准库模块提供日志记录API的关键好处是 ...
- python模块--logging
一.logging模块的简单应用 import logging logging.debug('debug message') logging.info('ingo message') logging. ...
- Python模块logging
基本用法: import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = logging.getLogger("A ...
- python模块-logging的智商上限
logging,故名肆意就是正在进行日志,我艹,这个文化底蕴! logging是python内置的日志模块,便于日常程序的日志写入和输出 logging共分为5个日志等级,分别是: debug , i ...
- Python模块-logging模块(一)
logging模块用来写日志文件 有5个级别,debug(),info(),warning(),error()和critical(),级别最高的为critical() debug()为调试模式,inf ...
- [Python 模块] logging模块、Logger类
logging模块: 标准库里面的logging模块,在前面学习线程安全时曾用来解决print被打断的问题,这里会介绍logging模块的功能. logging模块是线程安全的,不需要客户做任何特殊的 ...
- Python模块-logging模块(二)
logging模块记录日志有四个主要类:logger,handler,formatter,filter logger提供了应用程序可以直接使用的接口,每个程序在输出信息之前都要获得一个Logger h ...
- python 模块之-logging
python 模块logging import logging ### 简单使用格式 日志级别等级CRITICAL > ERROR > WARNING > INFO > ...
- python的logging日志模块(二)
晚上比较懒,直接搬砖了. 1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('Thi ...
随机推荐
- assets与res/raw资源目录的区别
1.简介 assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前要求,否则将不能读出数据.),这些文件将被原样打包到APK中应用使用. 2.不同 assets目录下的文件将原 ...
- jQuery委托
$('#container').on('click', '.elementClass', function() { // code }); http://stackoverflow.com/quest ...
- Zclip点击复制内容到剪贴板兼容各浏览器
WEB开发中,要让用户复制页面中的一段代码.URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内容将会被复制, ...
- 好用的SqlParamterList
public class SqlParameterList : List<SqlParameter> { #region Properties /// <summary> // ...
- Vue 学习之el、template、replace和vue的生命周期 参考网址:https://segmentfault.com/a/1190000008010666
- 第一次阅读作业 xinzcover
---恢复内容开始--- 第一次阅读和准备作业 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作 ...
- How do I get started with Node.js
From: http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js Tutorials NodeSch ...
- 我用的主机,推荐给大家【gegehost】【戈戈主机】
炎炎夏日冰点价格:戈戈主机史上最大优惠促销活动 1.7月1日至8日:买主机优惠大促销:主机买一送一,不限购买数量 请您通过客户中心或者淘宝购买一个主机之后,登录客户中心,提交问题, 提供要赠送的主机的 ...
- CREATE TABLE AS - 从一条查询的结果中创建一个新表
SYNOPSIS CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ...
- Flask框架 之数据库扩展Flask-SQLAlchemy
一.安装扩展 pip install flask-sqlalchemy pip install flask-mysqldb 二.SQLAlchemy 常用的SQLAlchemy字段类型 类型名 pyt ...