码迷,mamicode.com
首页 > 其他好文 > 详细

logging模块

时间:2018-05-07 00:46:49      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:ogg   cal   evel   多个   port   etl   and   get   orm   

  1 import logging
  2 
  3 logging.basicConfig(
  4     level=logging.DEBUG,
  5     filename="logger.log"
  6 )
  7 
  8 logging.debug(debug message)
  9 logging.info(info message)
 10 logging.warning(warning message)
 11 logging.error(error message)
 12 logging.critical(critical message)
 13 
 14 ## ---------------------  logger
 15 import logging
 16 def logger():
 17     logger = logging.getLogger()
 18 
 19     fh = logging.FileHandler("test_log")
 20     ch = logging.StreamHandler()
 21 
 22     fm = logging.Formatter(%(asctime)s %(message)s)
 23     # fm = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)
 24     fh.setFormatter(fm)
 25     ch.setFormatter(fm)
 26 
 27     logger.addHandler(fh)
 28     logger.addHandler(ch)
 29     logger.setLevel("DEBUG")
 30     return logger
 31 
 32 logger = logger()
 33 
 34 logger.debug(logger debug message)
 35 logger.info(logger info message)
 36 logger.warning(logger warning message)
 37 logger.error(logger error message)
 38 logger.critical(logger critical message)
 39 
 40 import logging
 41 
 42 logger = logging.getLogger()
 43 # 创建一个handler,用于写入日志文件
 44 fh = logging.FileHandler(test.log)
 45 
 46 # 再创建一个handler,用于输出到控制台
 47 ch = logging.StreamHandler()
 48 
 49 formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
 50 
 51 fh.setFormatter(formatter)
 52 ch.setFormatter(formatter)
 53 
 54 logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
 55 logger.addHandler(ch)
 56 
 57 logger.debug(logger debug message)
 58 logger.info(logger info message)
 59 logger.warning(logger warning message)
 60 logger.error(logger error message)
 61 logger.critical(logger critical message)
 62 
 63 ##################################################
 64 import logging
 65 
 66 logger1 = logging.getLogger(mylogger)
 67 logger1.setLevel(logging.DEBUG)
 68 
 69 logger2 = logging.getLogger(mylogger)
 70 logger2.setLevel(logging.INFO)
 71 
 72 fh = logging.FileHandler("test_log_new")
 73 ch = logging.StreamHandler()
 74 
 75 logger1.addHandler(fh)
 76 logger1.addHandler(ch)
 77 
 78 logger2.addHandler(fh)
 79 logger2.addHandler(ch)
 80 
 81 logger1.debug(logger1 debug message)
 82 logger1.info(logger1 info message)
 83 logger1.warning(logger1 warning message)
 84 logger1.error(logger1 error message)
 85 logger1.critical(logger1 critical message)
 86 
 87 logger2.debug(logger2 debug message)
 88 logger2.info(logger2 info message)
 89 logger2.warning(logger2 warning message)
 90 logger2.error(logger2 error message)
 91 logger2.critical(logger2 critical message)
 92 ## 结果
 93 ## logger1 info message
 94 ## logger1 warning message
 95 ## logger1 error message
 96 ## logger1 critical message
 97 ## logger2 info message
 98 ## logger2 warning message
 99 ## logger2 error message
100 ## logger2 critical message#
101 ## 这里有两个个问题:
102 ## <1>我们明明通过logger1.setLevel(logging.DEBUG)将logger1的日志级别设置为了DEBUG,为何显示的时候没有显示出DEBUG级别的日志信息,而是从INFO级别的日志开始显示呢?
103 ## 原来logger1和logger2对应的是同一个Logger实例,只要logging.getLogger(name)中名称参数name相同则返回的Logger实例就是同一个,且仅有一个,也即name与Logger实例一一对应。在logger2实例中通过logger2.setLevel(logging.INFO)设置mylogger的日志级别为logging.INFO,所以最后logger1的输出遵从了后来设置的日志级别。
104 ## <2>为什么logger1、logger2对应的每个输出分别显示两次?
105 ## 这是因为我们通过logger = logging.getLogger()显示的创建了root Logger,而logger1 = logging.getLogger(‘mylogger‘)创建了root Logger的孩子(root.)mylogger,logger2同样。而孩子,孙子,重孙……既会将消息分发给他的handler进行处理也会传递给所有的祖先Logger处理。
106 ## ok,那么现在我们把
107 import logging
108 
109 logger = logging.getLogger()
110 
111 logger1 = logging.getLogger(mylogger)
112 logger1.setLevel(logging.DEBUG)
113 
114 fh = logging.FileHandler("test_log_new")
115 ch = logging.StreamHandler()
116 
117 logger.addHandler(fh)
118 logger.addHandler(ch)
119 
120 logger1.addHandler(fh)
121 logger1.addHandler(ch)
122 
123 
124 logger.debug(logger debug message)
125 logger.info(logger info message)
126 logger.warning(logger warning message)
127 logger.error(logger error message)
128 logger.critical(logger critical message)
129 
130 logger1.debug(logger1 debug message)
131 logger1.info(logger1 info message)
132 logger1.warning(logger1 warning message)
133 logger1.error(logger1 error message)
134 logger1.critical(logger1 critical message)
135 ## 结果
136 ## logger warning message
137 ## logger error message
138 ## logger critical message
139 ## logger1 debug message
140 ## logger1 debug message
141 ## logger1 info message
142 ## logger1 info message
143 ## logger1 warning message
144 ## logger1 warning message
145 ## logger1 error message
146 ## logger1 error message
147 ## logger1 critical message
148 ## logger1 critical message
149 ## 因为我们注释了logger对象显示的位置,所以才用了默认方式,即标准输出方式。因为它的父级没有设置文件显示方式,
150 ##所以在这里只打印了一次。孩子,孙子,重孙……可逐层继承来自祖先的日志级别、Handler、Filter设置,也可以通过
151 ##Logger.setLevel(lel)、Logger.addHandler(hdlr)、Logger.removeHandler(hdlr)、Logger.addFilter(filt)、Logger.removeFilter(filt)。
152 ##设置自己特别的日志级别、Handler、Filter。若不设置则使用继承来的值。

 

logging模块

标签:ogg   cal   evel   多个   port   etl   and   get   orm   

原文地址:https://www.cnblogs.com/humanskin/p/9000460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!