Python模块学习之logging

logging模块是在2.3新引进的功能,下面是一些常用的类和模块级函数

模块级函数

logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root logger

logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():设定root logger的日志级别

logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中

import logging
import sys

LEVELS = {‘debug‘: logging.DEBUG,
          ‘info‘: logging.INFO,
          ‘warning‘: logging.WARNING,
          ‘error‘: logging.ERROR,
          ‘critical‘: logging.CRITICAL}

if len(sys.argv) > 1:
    level_name = sys.argv[1]
    level = LEVELS.get(level_name, logging.NOTSET)
    logging.basicConfig(level=level)

logging.debug(‘This is a debug message‘)
logging.info(‘This is an info message‘)
logging.warning(‘This is a warning message‘)
logging.error(‘This is an error message‘)
logging.critical(‘This is a critical error message‘)

运行结果如下:

$ python logging_level_example.py debug
DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical error message

$ python logging_level_example.py info
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical error message

Loggers


Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高


Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter


Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler


Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别

import logging

# create logger
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

运行结果如下:

$ python simple_logging_module.py
2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message
2005-03-19 15:10:26,697 - simple_example - ERROR - error message
2005-03-19 15:10:26,773 - simple_example - CRITICAL - critical message

Handlers


handler对象负责发送相关的信息到指定目的地。可以通过addHandler()方法添加多个多handler


Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略


Handler.setFormatter():给这个handler选择一个格式


Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象



Formatters


Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息



%(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


用户输出的消息

再来一个例子:



import logging

# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
                    format=‘%(asctime)s %(name)-12s %(levelname)-8s %(message)s‘,
                    datefmt=‘%m-%d %H:%M‘,
                    filename=‘/temp/myapp.log‘,
                    filemode=‘w‘)
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter(‘%(name)-12s: %(levelname)-8s %(message)s‘)
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger(‘‘).addHandler(console)

# Now, we can log to the root logger, or any other logger. First the root...
logging.info(‘Jackdaws love my big sphinx of quartz.‘)

# Now, define a couple of other loggers which might represent areas in your
# application:

logger1 = logging.getLogger(‘myapp.area1‘)
logger2 = logging.getLogger(‘myapp.area2‘)

logger1.debug(‘Quick zephyrs blow, vexing daft Jim.‘)
logger1.info(‘How quickly daft jumping zebras vex.‘)
logger2.warning(‘Jail zesty vixen who grabbed pay from quack.‘)
logger2.error(‘The five boxing wizards jump quickly.‘)

运行后,在终端看到的结果

root        : INFO     Jackdaws love my big sphinx of quartz.
myapp.area1 : INFO     How quickly daft jumping zebras vex.
myapp.area2 : WARNING  Jail zesty vixen who grabbed pay from quack.
myapp.area2 : ERROR    The five boxing wizards jump quickly.

在日志文件中的结果

10-22 22:19 root         INFO     Jackdaws love my big sphinx of quartz.
10-22 22:19 myapp.area1  DEBUG    Quick zephyrs blow, vexing daft Jim.
10-22 22:19 myapp.area1  INFO     How quickly daft jumping zebras vex.
10-22 22:19 myapp.area2  WARNING  Jail zesty vixen who grabbed pay from quack.
10-22 22:19 myapp.area2  ERROR    The five boxing wizards jump quickly.

发现DEBUG信息只有在文件中出现,这是因为StreamHandler中setLevel是INFO,可以看出Logger.setLevel()和handler.setLevel()的区别

详细信息请参阅 http://docs.python.org/library/logging.html

 
 
时间: 2024-08-03 15:11:15

Python模块学习之logging的相关文章

python模块学习(2)——re模块

正则表达式并不是python的一部分,正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分.如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了. 下图展示了使用正则表达式进行匹配的流程:  正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符

Python 模块学习

模块学习: http://wsyht90.blog.51cto.com/9014030/1845737 1.getpass 2.os 3.sys 4.subprocess 5.hashlib 6.json 7.pickle 8.shutil 9.time 10.datetime 11.re 12.random 13.configparser 14.traceback 15.yaml 16.itertools 17.logging 18.urllib.urllib2 19.paramiko ###

python模块学习第 0000 题

将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiaohan/show-me-the-code,感谢@史江歌以及其他人,让我找到了一个系统的学习python模块的好地方. 看到这个题目的第一印象是——额,难不成让我找qq的API,然后在手机APP的壁纸上提示QQ消息?好吧,我承认自己想复杂了,所以第二个想法就来了.因为博主最近学习比较杂乱无章,所以学习了tkin

Python模块学习

python模块-time python模块-datetime

Python 模块学习 logging

一.快速入门 1.基础知识 派出: 控制台输出:print() 报告事件,发生在一个程序的正常运行:logging.info()或logging.debug() 发出警告关于一个特定的运行时事件:warnings.warn()或logging.warning() 报告一个错误对于一个特定的运行时事件:异常处理 报告一个错误当没有引发一个异常:logging.error().logging.exception()或logging.critical() 级别: DEBUG:详细的信息,通常只出现在诊

python模块学习 logging

1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING:日志级别大小关系为:CRITICAL > ER

python模块学习之数据结构--collections.counter

python包含非常多的标准数据结构,如list,tuple,dict 和set 都是内置类型.除了这些基本的内置类型.python的collections模块还很多种数据结构实现. collections----容器数据类型模块 python版本:2.6以及以后版本 collections模块包含除内置內型list,dict 和tuple之外的数据类型. 1.1 Counter 1.1.1 Counter作为一个容器(啥是容器呢,能装入不同的对象就是容器),可以跟踪相同数据的次数. 初始化输入

Python模块学习笔记— —random

Python中的random模块用于生成随机数. random.random 函数原型 random.random() 生成一个范围在[0,1)的随机浮点数. import random print random.random() random.uniform 函数原型 random.uniform(a,b) 生成一个指定范围内的随机浮点数,两个参数一个是上限,一个是下限.如果a > b,则生成的随机数范围在[b,a].否则, 范围在[a,b]. import random print rand

【Python模块学习】sys模块

sys模块的操作如下: 1 sys.argv # 实现从程序外部向程序传递参数. 2 sys.exit([arg]) # 程序中间的退出,arg=0为正常退出. 3 sys.getdefaultencoding() # 获取系统当前编码,一般默认为ascii. 4 sys.setdefaultencoding() # 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时