python初步学习-python模块之 logging
logging
许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪。在
python中,我们不需要第三方的日志组件,python为我们提供了简单易用、且功能强大的日志模块:logging。
logging模块支持将日志信息保存到不同的日志域中,如:保存到日志文件中;以邮件的形式发送日志信息;以http get或post的方式提交日志到web服务器;以windows事件的形式记录等等。
简单的例子:
# 导入 logging 包
import logging
#为生成的日志做一些基本的配置
#比如下面配置了日志文件的绝对路径和日志等级
logging.basicConfig(filename=os.path.join(os.getcwd(),'test.log'),level=loggin.DEBUG)
logging.debug('this is a message!')
运行上面例子的代码,将会在程序的根目录下创建一个test.log的文件,打开该文件,里面有一条日志记录:"DEBUG:root:this is a message"
4个主要的组件
- logger:日志类,应用程序往往通过调用它提供的
api来记录日志。 - handler:对日志信息处理,可以将日志发送(保存)到不同的目标域中;
- filter:对日志信息进行过滤
- formatter:日志的格式化
日志级别
在记录日志是,日志信息都会关联一个级别("级别"本质上是一个非负整数)。系统默认提供了6个级别,它们分别是
:
| 级别 | 对应的值 |
|---|---|
| CRITICAL | 50 |
| ERROR | 40 |
| WARNING | 30 |
| INFO | 20 |
| DEBUG | 10 |
| NOTSET | 0 |
可以给日志对象(logger instance)设置日志级别,低于该级别的日志信息将会被忽略;也可以给Hanlder设置日志级别,对于低于该级别的日志信息,Handler也会忽略
logging 模块中常用函数
logging.basicConfig([**kwargs]):
为日志模块配置基本信息。kwargs支持如下几个关键字参数:
- filename:日志文件的保存路径。如果配置了这个参数,将自动创建一个文件句柄作为
handler - filemode:日志文件的打开模式。默认值为'a',表示日志信息以追加的形式添加到日志文件中。如果设为'w',那么每次程序启动的时候都会创建一个新的日志文件;
- format:设置日志输出格式
- datefmt:定义日期格式
- level:设置日志的级别,对低于该级别的日志信息将会被忽略
- stream:设置特定的流用于初始化
StreamHandler
下面是一个简单的例子:
#!/usr/bin/env python
#coding:utf8
import logging
logging.basicConfig(filename=os.path.join(os.getcws(),'test.log'),level=logging.WARN,filemode='w',format='%(asctime)s - %(levelname)s: %(message)s')
logging.debug('debug') #被忽略
logging.info('info') #被忽略
logging.warning('warn') #记录
logging.error('error') #记录
#——————————————结果————————————————
#2017-11-10 23:23:14,661 - WARNING: warn
#2017-11-10 23:23:14,663 - ERROR: error
format 的格式
| 变量 | 解释 |
|---|---|
| %(name)s | Logger的名字 |
| %(levelno)s | 数字形式的日志级别 |
| %(levelname)s | 文本形式的日志级别 |
| %(pathname)s | 调用日志输出函数的模块的完整路径名,可能没有 |
| %(filename)s | 调用日志输出函数的模块的文件名 |
| %(module)s | 调用日志输出函数的模块名 |
| %(funcName)s | 调用日志输出函数的函数名 |
| %(lineno)d | 调用日志输出函数的语句所在的代码行 |
| %(created)f | 当前时间,用UNIX标准的表示时间的浮点数表示 |
| %(relativeCreated)d | 输出日志信息时的,自Logger创建以来的毫秒数 |
| %(asctime)s | 字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896”。逗号后面的是毫秒 |
| %(thread)d | 线程ID。可能没有 |
| %(threadName)s | 线程名。可能没有 |
| %(process)d | 进程ID。可能没有 |
| %(message)s | 用户输出的消息 |
logging.getLogger([name])
创建一个Logger对象。日志记录的工作主要由Logger对象来完成。在调用getLogger时要提供Logger的名称,logger实例之间有层次关系,这些关系通过Logger名称来实现。
#!/usr/bin/env python
#coding:utf8
import logging
logging.basicConfig(filename=os.path.join(os.getcwd(),'test1.log'),level=logging.WARN,filemode='w',format='%(asctime)s %(name)s %(levelname)s: %(message)s')
a1 = logging.getLogger("alpha")
b1 = logging.getLogger("beta")
c1 = logging.getLogger("gamma")
a1.warning("this is a test from a1!")
b1.warning("this is a test from b1!")
c1.warning("this is a test from c1!")
输出结果:
2017-11-10 23:53:02,448 alpha WARNING: this is a test from a1!
2017-11-10 23:53:02,448 beta WARNING: this is a test from b1!
2017-11-10 23:53:02,448 gamma WARNING: this is a test from c1!
python初步学习-python模块之 logging的更多相关文章
- python初步学习-python函数(一)
python 函数 函数是组织好的,可重复使用的,用来实现单一或者相关联功能的代码段. 函数能提高应用的模块性和代码的重复利用率. 函数定义 python中函数定义有一些简单的规则: 函数代码块以de ...
- python初步学习-Python模块之 re
re 正则表达式 python正则表达式在线检验网站 python re正则表达式语法 匹配字符 语法 解释 表达式 匹配实例 . 匹配任意除"\n"以外的任何字符 a.c abc ...
- python初步学习-python 模块之 json
json 模块 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写.一般API返回的数据大多是 JSON.XML,如果返回JSON的话,将获取 ...
- python初步学习-python模块之 os
os os 模块在运维工作中是很常用的一个模块.通过os模块调用系统命令.os模块可以跨平台使用. 在 import os的时候,建议使用import os而非from os import *.这样可 ...
- python初步学习-python 模块之 sys(持续补充)
sys sys 模块包括了一组非常实用的服务,内含很多函数方法和变量 sys 模块重要函数变量 sys.stdin 标准输出流 sys.stdout 标准输出流 sys.stderr 标准错误流 sy ...
- python初步学习-python模块之 commands
commands 通过 os.popen() 执行 shell 命令,返回两个对象,一个是 状态码(Int).另一个为命令输出(str) commands.getoutput(cmd) 返回命令执行输 ...
- python初步学习-python文件操作
文件 文件,在python中,他是一种类型的对象,类似前面已经学过的其他数据类型,包括文本的.图片的.音频的.视频的等等,还有不少没见过的扩展名的.事实上,在linux操作系统中,所有的东西都被保存到 ...
- python初步学习-python函数 (二)
几个特殊的函数(待补充) python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda >& ...
- python初步学习-python控制流
语句书写规范 缩进在python语言书写中非常重要,如果缩进不规范,执行程序将会报错 引用维基百科中的叙述: Python開發者有意讓違反了縮排規則的程序不能通過編譯,以此來強迫程序員養成良好的編程習 ...
随机推荐
- utuntu 安装python3.5
如果想要升级Utuntu系统中的python版本,请不要卸载原先的版本. 桌面环境中的需要依赖于python相关,卸载之后会出现意想不到问题. (1)sudo add-apt-repository p ...
- python获取toast 验证
appium版本 1.6.3 desired_caps['automationName']='uiautomator2' def _find_toast(self,message,timeou ...
- 【bzoj3533】[Sdoi2014]向量集 线段树+STL-vector维护凸包
题目描述 维护一个向量集合,在线支持以下操作:"A x y (|x|,|y| < =10^8)":加入向量(x,y);"Q x y l r (|x|,|y| < ...
- Collection接口框架
1. Collection接口 其主要的UML类图: Collection接口继承自Iterable接口.Iterable接口中定义了Iterable方法,该方法会返回一个迭代器,用于遍历合集中的元素 ...
- Keywords Search HDU - 2222(ac自动机板题。。)
求一个字符串上有多少个匹配的单词 看着卿学姐的板子写的 指针形式: #include <iostream> #include <cstdio> #include <sst ...
- WIN7 右下角音量图标不见了
1.呼叫出 任务管理器,结束掉 explorer.exe 进程 2.新建任务,浏览,找到 C:/windows/system32/systray.exe,确定加载 3.新建任务,输入explorer ...
- Cycle Sort (交换次数最少的排序)
该算法的效率并不高.但是却提供了一个很好的思路.如何让一个序列在最小交换次数下实现有序. Cycle Sort 翻译成中文是 圈排序. 这个圈在于需要交换的数据形成圈. 具体一点: 如: Array ...
- KinFu --- KinectFusion的开源实现
KinectFusion是微软研究院的一个项目,研究用Kinect来实时地重构3D表面,最终用于人机交互. 先看视频:http://research.microsoft.com/en-us/proje ...
- centos上部署nginx服务
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
- jq从数组中删除指定元素(根据自定义条件) 超好用的 $.grep() 方法
转: jQuery.grep() 什么是jQuery.grep()? jQuery.grep()是一个查找满足过滤函数的数组元素的函数.原始数组不受影响,返回值为数组. 用法介绍: 写法: jQuer ...