Python(2.7.6) 标准日志模块 - Logging Handler
Python 标准日志模块使用 Handler 控制日志消息写到不同的目的地,如文件、流、邮件、socket 等。除了StreamHandler、 FileHandler 和 NullHandler 定义在 logging 模块中,其他的 Handler 均定义在 logging.hangdlers 模块中。这些 Handler 是:WatchedFileHandler、RotatingFileHandler、TimedRotatingFileHandler、SocketHandler、DatagramHandler、SysLogHandler、NTEventLogHandler、SMTPHandler、MemoryHandler、HTTPHandler。
RotatingFileHandler 能够管理日志文件的大小,当日志文件的大小达到阈值后,它会重命名日志文件,然后再创建一个新的同名日志文件继续输出。
import logging
import logging.handlers handler = logging.handlers.RotatingFileHandler(
filename = 'myapp.log',
maxBytes = 200,
backupCount = 5,
)
handler.setFormatter(
logging.Formatter(
fmt = '%(asctime)s [%(threadName)s] (%(filename)s:%(lineno)d) %(levelname)s - %(message)s',
datefmt = '%Y-%m-%d %H:%M:%S'
)
) root = logging.getLogger()
root.setLevel(logging.DEBUG)
root.addHandler(handler) for i in range(20):
root.debug('The Message(%d/20).' % (i + 1))
参数 maxBytes 设定了日志文件大小的阈值,参数 backupCount 设定了备份文件的个数。当日志文件即 myapp.log 的大小达到阈值200字节的时候,RotatingFileHandler 会将 myapp.log 重命名为 myapp.log.1,然后再创建一个新的同名日志文件 myapp.log。当 myapp.log 的大小又达到200字节时,RotatingFileHandler 将会把 myapp.log.1 重命名为 myapp.log.2,再把 myapp.log 重命名为 myapp.log.1,然后再创建一个新的同名日志文件 myapp.log。这样反复直到创建了5个备份文件后,当 myapp.log 的大小再次达到200字节时,RotatingFileHandler 不会将 myapp.log.5 重命名为 myapp.log.6 而是将其删除。
TimedRotatingFileHandler 和 RotatingFileHandler 类似,不过,TimedRotatingFileHandler 没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就自动创建新的日志文件。重命名的过程中,备份日志文件的后缀不是数字,而是当前时间。
import logging
import logging.handlers
import time handler = logging.handlers.TimedRotatingFileHandler(
filename = 'myapp.log',
when = 'M',
interval = 2,
backupCount = 3,
)
handler.setFormatter(
logging.Formatter(
fmt = '%(asctime)s [%(threadName)s] (%(filename)s:%(lineno)d) %(levelname)s - %(message)s',
datefmt = '%Y-%m-%d %H:%M:%S'
)
) root = logging.getLogger()
root.setLevel(logging.DEBUG)
root.addHandler(handler) for i in range(20):
root.debug('The Message(%d/20).' % (i + 1))
time.sleep(30)
参数 interval 设定了时间间隔,参数 when 设定了间隔的单位。when 的取值可以是 'S'(秒)、 'M'(分)、 'H'(小时)、 'D'(天)、 'W0' - 'W6'(周一至周日)、 'midnight'(凌晨),当 when 的取值是 'W0' - 'W6' 或 'midnight' 时,参数 interval 的取值是被忽略的。
SMTPHandler 能够通过 SMTP 将日志消息发送到邮件服务器中。
import logging
import logging.handlers handler = logging.handlers.SMTPHandler(
mailhost = ('smtp.163.com', 25),
fromaddr = 'huey@163.com',
toaddrs = 'test@163.com',
subject = 'SMTPHandler Demo',
credentials = ('huey@163.com', '')
)
handler.setLevel(logging.CRITICAL)
handler.setFormatter(
logging.Formatter(
fmt = '%(asctime)s [%(threadName)s] (%(filename)s:%(lineno)d) %(levelname)s - %(message)s',
datefmt = '%Y-%m-%d %H:%M:%S'
)
) root = logging.getLogger()
root.addHandler(handler)
root.critical('This is a critical message');
其他 Handler 的用法示例待补充。
Python(2.7.6) 标准日志模块 - Logging Handler的更多相关文章
- Python(2.7.6) 标准日志模块 - Logging Configuration
除了使用 logging 模块中的 basicConfig 方法配置日志, Python 的 logging.config 模块中, dictConfig 和 fileConfig 方法分别支持通过字 ...
- Python中内置的日志模块logging用法详解
logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/P ...
- python标准日志模块logging及日志系统设计
最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下. python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发 ...
- python标准日志模块logging的使用方法
参考地址 最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下.python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果 ...
- python标准日志模块logging使用
python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用: ...
- Python(2.7.6) 标准日志模块的简单示例
Python 标准库中的 logging 模块提供了一套标准的 API 来处理日志信息的打印. import logging logging.basicConfig( level = logging. ...
- python日志模块logging
python日志模块logging 1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...
- 日志模块logging使用心得
在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...
- Python 全栈开发九 日志模块
日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...
随机推荐
- Esper系列(十四)Contained-Event Selection
功能:该语法是针对所查询事件中的属性又是另一种属性的查询结果控制. 格式: 1 "+j); 19 bean.setBean(item); 20 list.add(bea ...
- 检测是否安装了 .NET Framework 3.5
此脚本是为 Internet Explorer 设计的. 其他浏览器可能在 UserAgent 字符串中不包含 .NET CLR 信息. <HTML> <HEAD> &l ...
- 图解Java字符串不变性
1. 声明字符串 String s = "abcd"; 这里,s存储了“abcd”在这个字符串对象的引用,如下图所示: 2. 将字符串变量s赋值给字符串变量s2 String s2 ...
- placeholder 兼容IE9以下版本 包含pasword
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 牛一网ecshop综合类模板(仿淘常州) for ecshop 2.7.3
牛一网目前已经开发好这款ecshop综合类/多色系模板,已经开发好多种色系,本模板将会搭配多种颜色让用户选择,以适应 家电数码. 个护化妆. 生鲜水果 . 服饰鞋帽 . 图书音像 . 粮油食品.家具家 ...
- sts中从svn导入maven项目
1.创建资源库 2.导入项目作为本地项目 3.将子module从本地导入(默认情况下,只会将主pom所在的工程导入)
- ng-cookie 的基本使用
2.angular-cookie - 配置$cookiesProvider ```angular.module("Demo",[]).config(["$cookiesP ...
- matlab s变换
A4=readdata('E:\mydata.TXT');[st,t,f] = st(A4(1:1000,2)); surf(t,f,10*log10(abs(st)),'EdgeColor','no ...
- [威客任务]¥800.00 JS实现网站联动三级选项
任务地址:http://task.zhubajie.com/3275832/ 具体要求: 要求1) 选单样式参照附件2) 点击第一个选项内容后,跳出第二个选项栏位,并自动更新选项内容3) 点击第二个选 ...
- Android真机抓屏- Android Screen Monitor
一般运行Android应用程序有两种方式一种是设置Android虚拟设备模拟器,通过Android Virtual Manger进行管理,一种是插入USB数据线直接真机上进行调试,但是如果电脑配置比 ...