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開發者有意讓違反了縮排規則的程序不能通過編譯,以此來強迫程序員養成良好的編程習 ...
随机推荐
- 4th 课堂SCRM会议旁观记录
项目名称:基于C#的连连看设计 小组名称:待定 小组成员:张政.张金生.武志远.李权 Master:张政 项目已完成部分: 现阶段已经实现了一定的功能,可以运行使用,进行第一关的游戏. 今天计划要完成 ...
- (七)对Jmeter进行参数化的俩种方式
一.使用CSV Data Set Config: 1.添加CSV Data Set Config: 2.配置参数: Filename:文件名,指保存参数化数据的文件目录,可以相对或者绝对路径. Fil ...
- 如何在windows下Apache环境开启htaccess伪静态功能
以下文章来自于网络,只做学习用 很多国人习惯用windows服务器或者在windows系统下调试PHP程序,在调试货使用的时候就遇到开启伪静态的各种问题,今天在网络上搜集了一些开启伪静态需要注意 ...
- php中扩展pecl与pear
要为大家分享的内容是PECL 和 PEAR 他们之间的不同和相同之处. PEAR 是“PHP Extension and Application Repository”的缩写,即PHP扩展和应用仓库. ...
- Linux下编译程序时,经常会遇到“undefined reference to XXX” 报错,
Linux下编译程序时,经常会遇到“undefined reference to XXX” 报错, 这里总结一些可能的原因和解决方案,给需要的朋友: 说道undefined reference err ...
- webgl glsl
GLSL是什么? GLSL是运行在GPU上的着色器语言 GLSL有自己的语法,跟js有些不同. GLSL是一个强类型的语言,所以在写着器语言时,必须要用强类型,强类型,强类型,强类型 GLSL是着色器 ...
- bzoj3622-已经没有什么好害怕的的了
题意 给出两个长度为 \(n\) 的数列 \(a,b\) ,\(2n\) 个数都互不相同,求有多少种对应方式使得 \(a_i>b_i\) 的个数比 \(a_i<b_i\) 的个数恰好多 \ ...
- 黑客帝国雨效果JS
黑客帝国雨效果JS. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Day20-初识Ajax
想要实现的功能:点击提交以后,让数据发到后台进行验证,但是页面不刷新.悄悄提交用Ajax. 那么返回的字符串怎么样展示到前端HTML页面呢?可以在HTML中写个标签,定义一个选择器. 利用$('#id ...
- Redis的Set无序集合命令
Set是集合,它是string类型的无序集合.set是通过hash table实现的,添加.删除和查找的复杂度都是0(1).对集合我们可以取并集.交集.差集.通过这些操作我们可以实现sns中的好友推荐 ...