在python的logging模块中主要有四个组件:
logger: 日志类,应用程序往往通过调用它提供的api来记录日志。
handler: 对日志信息处理,可以将日志发送(保存)到不同的目标域中。
filter: 对日志信息进行过滤。
formatter:日志的格式化。
下面写了一个简单的脚本试一下各个组件的功能
- import logging
- #创建两个日志类
- LOG1=logging.getLogger('a.b.c')
- LOG2=logging.getLogger('d.e')
- #创建handler对象
- console = logging.FileHandler('/home/dwapp/joe.wangh/test/logging/test.log','a')
- #设置日志输出信息的格式
- formatter = logging.Formatter('%(name)s %(asctime)s %(levelname)s %(message)s')
- console.setFormatter(formatter)
- #设置过滤器 可以设置多个过滤器 只要日志信息不满足其中任何一个 就不会被输出
- filter=logging.Filter('a.b')
- #console.addFilter(filter)
- #给两个日志类绑定handler对象
- LOG1.addHandler(console)
- LOG2.addHandler(console)
- #设置输出日志信息的等级 这里设为logging.INFO 意味着只输出高于logging.INFO等级的日志信息
- LOG1.setLevel(logging.INFO)
- LOG2.setLevel(logging.DEBUG)
- #输出一些日志信息
- LOG1.debug('debug')
- LOG1.info('info')
- LOG1.warning('warning')
- LOG1.error('error')
- LOG1.critical('critical')
- LOG2.debug('debug')
- LOG2.info('info')
- LOG2.warning('warning')
- LOG2.error('error')
- LOG2.critical('critical')
运行一下看看结果
- dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>python t1.py
- dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>cat test.log
- a.b.c 2010-11-24 18:53:20,160 INFO info
- a.b.c 2010-11-24 18:53:20,183 WARNING warning
- a.b.c 2010-11-24 18:53:20,183 ERROR error
- a.b.c 2010-11-24 18:53:20,183 CRITICAL critical
- d.e 2010-11-24 18:53:20,183 DEBUG debug
- d.e 2010-11-24 18:53:20,183 INFO info
- d.e 2010-11-24 18:53:20,184 WARNING warning
- d.e 2010-11-24 18:53:20,184 ERROR error
- d.e 2010-11-24 18:53:20,184 CRITICAL critical
把#console.addFilter(filter)的注释取消掉 再执行一遍
- dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>python t1.py
- dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>
- dwapp@pttest1:/home/dwapp/joe.wangh/test/logging>cat test.log
- a.b.c 2010-11-24 18:54:33,264 INFO info
- a.b.c 2010-11-24 18:54:33,287 WARNING warning
- a.b.c 2010-11-24 18:54:33,287 ERROR error
- 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
用户输出的消息
阅读(1012) | 评论(0) | 转发(0) |