python logging模块

 

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')  

 


 


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 02 03 # create logger 04 logger = logging.getLogger("simple_example") 05 logger.setLevel(logging.DEBUG) 06 07 # create console handler and set level to debug 08 ch = logging.StreamHandler() 09 ch.setLevel(logging.DEBUG) 10 11 # create formatter 12 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") 13 14 # add formatter to ch 15 ch.setFormatter(formatter) 16 17 # add ch to logger 18 logger.addHandler(ch) 19 20 # "application" code 21 logger.debug("debug message") 22 logger.info("info message") 23 logger.warn("warn message") 24 logger.error("error message") 25 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 02 03 # set up logging to file - see previous section for more details 04 logging.basicConfig(level=logging.DEBUG, 05 format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 06 datefmt='%m-%d %H:%M', 07 filename='/temp/myapp.log', 08 filemode='w') 09 # define a Handler which writes INFO messages or higher to the sys.stderr 10 console = logging.StreamHandler() 11 console.setLevel(logging.INFO) 12 # set a format which is simpler for console use 13 formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 14 # tell the handler to use this format 15 console.setFormatter(formatter) 16 # add the handler to the root logger 17 logging.getLogger('').addHandler(console) 18 19 # Now, we can log to the root logger, or any other logger. First the root... 20 logging.info('Jackdaws love my big sphinx of quartz.') 21 22 # Now, define a couple of other loggers which might represent areas in your 23 # application: 24 25 logger1 = logging.getLogger('myapp.area1') 26 logger2 = logging.getLogger('myapp.area2') 27 28 logger1.debug('Quick zephyrs blow, vexing daft Jim.') 29 logger1.info('How quickly daft jumping zebras vex.') 30 logger2.warning('Jail zesty vixen who grabbed pay from quack.') 31 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
$ 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

 

你可能感兴趣的:(thread,python,filter,application,import,logging)