Python: Logging模块实例详解
Logging 模块
import logging
Quick Start
导入模块后直接logging.waring()
,logging.error()
简单粗暴地调用即可。默认的level
是DEBUG
,所以warning
会打印出信息,info
级别更低,不会输出信息。如果你不知道level
等参数的意义请后面解释,淡定,继续往下看。
如果不特别配置,logging
模块将日志打印到屏幕上(stdout)。
#!/usr/local/bin/python
# -*- coding:utf-8 -*-
import logging
logging.warning('Watch out!') # print message to console
logging.info('I told you so') # will not print anything
Log
写入文件
更常见的情形是把信息记录在log
文件里。需要用logging.basicConfig()
设置文件名以及level
等参数,常见的level
见下表。
Level |
Value |
Usage |
---|---|---|
CRITICAL |
50 |
严重错误,表明程序已不能继续运行了 |
ERROR |
40 |
严重的问题,程序已不能执行一些功能了 |
WARNING |
30 |
有意外,将来可能发生问题,但依然可用 |
INFO |
20 |
证明事情按预期工作 |
DEBUG |
10 |
详细信息,调试问题时会感兴趣。 |
如果设置level
为INFO
,那么DEBUG
级别的信息就不会输出。常见的函数接口有debug()
, info()
, warning()
, error()
and critical()
,分别对应log
不同严重级别的信息。
注意把下面代码写入脚本(直接在terminal
里不会生成文件),比如test_log.py
。
import logging
logging.basicConfig(filename='example.log',level=logging.DEBUG,filemode='w')
# filemode = 'w' 每次运行,重写log
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
cat example.log
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
改变Log
输出格式
通过format
参数,可以定制写入log
文件的格式。
import logging
logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG)
logging.debug('This message should appear on the console')
logging.info('So should this')
logging.warning('And this, too')
DEBUG:This message should appear on the console INFO:So should this WARNING:And this, too
记录时间
通过datafmt
参数,可以格式化输出log
的时间。
import logging
logging.basicConfig(format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')
07/16/2016 12:10:35 AM is when this event was logged.
更丰富的Log
控制
上面的代码大部分是利用默认配置,其实我们自定义更多。比如把输出到terminal
和log.txt
文件里。
首先理解几个概念是有用的。
-
Logger
记录器,暴露了应用程序代码能直接使用的接口。 -
Handler
处理器,将(记录器产生的)日志记录发送至合适的目的地。 -
Filter
过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。 -
Formatter
格式化器,指明了最终输出中日志记录的布局。
首先,创建一个logger
,记录器,然后给其添加不同的handler
,输出到不同的渠道,比如下面这个例子就会生成log.txt
文件,并同时输出在terminal
里。
import logging
# create logger with name
# if not specified, it will be root
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# create a handler, write to log.txt
# logging.FileHandler(self, filename, mode='a', encoding=None, delay=0)
# A handler class which writes formatted logging records to disk files.
fh = logging.FileHandler('log.txt')
fh.setLevel(logging.DEBUG)
# create another handler, for stdout in terminal
# A handler class which writes logging records to a stream
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)
# set formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)
# add handler to logger
logger.addHandler(fh)
logger.addHandler(sh)
# log it
logger.debug('Debug')
logger.info('Info')
2016-07-18 21:43:14,648 - my_logger - DEBUG - Debug
2016-07-18 21:43:14,650 - my_logger - INFO - Info
Ref:
- sql monitor的使用(一) (r2第30天)
- sql_profile的使用(一) (r2笔记29天)
- 关于权限设置的一个小把戏(r2第27天)
- R语言实现混合模型
- 数据迁移判断非空约束(r2笔记45天)
- 【专业技术】linux下socket编程
- oracle并行的小细节(r2笔记44天)
- python实现朴素贝叶斯模型:文本分类+垃圾邮件分类
- 使用闪回查询备份数据(r2笔记43天)
- 生产环境sql语句调优实战第四篇(r2笔记41天)
- 生产环境sql语句调优实战第五篇(r2笔记41天)
- python实现逻辑logistic回归:预测病马的死亡率
- 开发 | 图片数据集太少?看我七十二变,Keras Image Data Augmentation 各参数详解
- linux过滤空文件的命令总结(r2笔记40天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法