Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5017465
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: Python/Ruby

2011-06-01 12:31:19

在python的logging模块中主要有四个组件:
logger: 日志类,应用程序往往通过调用它提供的api来记录日志。
handler: 对日志信息处理,可以将日志发送(保存)到不同的目标域中。
filter: 对日志信息进行过滤。
formatter:日志的格式化。

下面写了一个简单的脚本试一下各个组件的功能  
 
  1. import logging
  2. #创建两个日志类
  3. LOG1=logging.getLogger('a.b.c')
  4. LOG2=logging.getLogger('d.e')
  5. #创建handler对象
  6. console = logging.FileHandler('/home/dwapp/joe.wangh/test/logging/test.log','a')
  7. #设置日志输出信息的格式
  8. formatter = logging.Formatter('%(name)s %(asctime)s %(levelname)s %(message)s')
  9. console.setFormatter(formatter)
  10. #设置过滤器 可以设置多个过滤器 只要日志信息不满足其中任何一个 就不会被输出
  11. filter=logging.Filter('a.b')
  12. #console.addFilter(filter)
  13. #给两个日志类绑定handler对象
  14. LOG1.addHandler(console)
  15. LOG2.addHandler(console)
  16. #设置输出日志信息的等级 这里设为logging.INFO 意味着只输出高于logging.INFO等级的日志信息
  17. LOG1.setLevel(logging.INFO)
  18. LOG2.setLevel(logging.DEBUG)
  19. #输出一些日志信息
  20. LOG1.debug('debug')
  21. LOG1.info('info')
  22. LOG1.warning('warning')
  23. LOG1.error('error')
  24. LOG1.critical('critical')

  25. LOG2.debug('debug')
  26. LOG2.info('info')
  27. LOG2.warning('warning')
  28. LOG2.error('error')
  29. LOG2.critical('critical')

运行一下看看结果

  1. dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>python t1.py
  2. dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>cat test.log
  3. a.b.c 2010-11-24 18:53:20,160 INFO info
  4. a.b.c 2010-11-24 18:53:20,183 WARNING warning
  5. a.b.c 2010-11-24 18:53:20,183 ERROR error
  6. a.b.c 2010-11-24 18:53:20,183 CRITICAL critical
  7. d.e 2010-11-24 18:53:20,183 DEBUG debug
  8. d.e 2010-11-24 18:53:20,183 INFO info
  9. d.e 2010-11-24 18:53:20,184 WARNING warning
  10. d.e 2010-11-24 18:53:20,184 ERROR error
  11. d.e 2010-11-24 18:53:20,184 CRITICAL critical

把#console.addFilter(filter)的注释取消掉 再执行一遍   

  1. dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>python t1.py
  2. dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>
  3. dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>cat test.log
  4. a.b.c 2010-11-24 18:54:33,264 INFO info
  5. a.b.c 2010-11-24 18:54:33,287 WARNING warning
  6. a.b.c 2010-11-24 18:54:33,287 ERROR error
  7. a.b.c 2010-11-24 18:54:33,287 CRITICAL critical

我们看到 这次以d.e开头的日志信息都被过滤掉了

下面附上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
 用户输出的消息
 

 

阅读(968) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~