几个学习连接:
Python官方链接:
https://docs.python.org/3.4/library/logging.html?highlight=logging
翻译(不过是2.3版本的)
http://crazier9527.iteye.com/blog/290018
另外的一个人的总结:
http://blog.csdn.net/fxjtoday/article/details/6307285
最好理解,写的最好的:
http://bbs.chinaunix.net/thread-3590256-1-1.html
我的学习总结基于http://bbs.chinaunix.net/thread-3590256-1-1.html
以一个简单的日志系统为例子进行说明:
目标:创建一个日志系统,这个日志系统不仅能把信息输出到控制台,还可以输出到文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#import logging包 import logging #创建一个logger logger = logging.getLogger( '' ) #设置logger的等级,大于等于这个等级的信息会被输出,其他会被忽略 logger.setLevel(logging.DEBUG) #Handler是英文翻译为处理者,用于输出到不同的地方:Stream为控制台,File为文件 #以下创建的是输出到文件的handler,并把等级设为DEBUG fh = logging.FileHandler( 'test.log' ) fh.setLevel(logging.DEBUG) #以下创建的是输出到控制台的handler,并把等级设为DEBUG sh = logging.StreamHandler() sh.setLevel(logging.DEBUG) #下面指定了handler的信息输出格式,其中asctime,name,levelname,message都是logging的关键字 formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) fh.setFormatter(formatter) sh.setFormatter(formatter) #把Handler加入到logger中,可理解为给处理者在logger中安排了职位 logger.addHandler(fh) logger.addHandler(sh) #记录一条为”Hello,Arsenal!”的info日志信息 logger.info( 'Hello,Arsenal!' ) print ( "process end!" ) |
注意:
Logger.setLevel(lvl)
设置logger的level, level有以下几个级别:
NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出
思考题:
运行下面的日志系统,找出错误并改正。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import logging logger = logging.getLogger( 'lylogger' ) logger.setLevel(logging.DEBUG) fh = logging.FileHandler( 'test.log' ) fh.setLevel(logging.DEBUG) sh = logging.StreamHandler() sh.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levlename)s - %(message)s' ) fh.setFormatter(formatter) sh.setFormatter(formatter) logger.addHandler(fh) logger.addHandler(sh) logger.info( 'Hello,Arsenal!' ) print ( "process end!" ) |
答案:
通过查看错误信息,定位Key :levlename,得知关键字levelname写错了。