Python logging日志组织方式

使用Python logging模块已经有一段时间了,为了更好的理解log工作方式,看了一下其源码,后总结如下: 日志模块中有以下核心组件:

  • 1.Logger类:日志处理类
  • 2.Filter类:过滤器类(是Logger、Handler等类父类)
  • 3.Handler类:日志处理类,有各种子类(FileHandler,StreamHandler等)
  • 4.LogRecord类:日志记录对象,代表一条日志记录
  • 5.Manager类:日志对象管理器,维护所有Log实例,和其父子关系
  • 6.Formatter类:日志记录格式化对象

1. logging模块的日志的根为RootLogger看下面示例代码:

    logging.basicConfig()
logging.info('')

logger = logging.getLogger()
logger.info('')

其都是使用RootLogger,name为'root',level为WARNING,我理解成日志树的根(最高父日志实例)。


2.logging root看下面的示例代码:

     logger1 = logging.getLogger('example')
print logger1.parent.name

#output
root

从上可看出,任何Logger实例,都是RootLogger的子节点,root是任何Logger name的最高父节点


3.logging 父子关系

看下面示例代码

     logger1 = logging.getLogger('example')
logger2 = logging.getLogger('example.child1')
logger2 = logging.getLogger('example.child2')
print logger1.parent.name
print logger2.parent.name

#output
root
example
example

其父子结构如下:

-root
-example
-example.child1
-example.child2

4.logging.config.fileConfig

其原理就是从logconfig配置文件中读取filters,formmaters,handlers,loggers等信息,最后生成一个预置的logger实例池, 在外部使用:

    logging.config.fileConfig("logging.conf")

#create logger
logger = logging.getLogger("example")

其原理是先从预置的日志管理器中检索有无name为example的log实例,如果有则直接使用,若没有,则新增。

posted @ 2011-09-06 16:34  残夜  阅读(679)  评论(0编辑  收藏  举报