码迷,mamicode.com
首页 > 编程语言 > 详细

【python】多个文件共用日志系统

时间:2015-12-30 11:31:59      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

先写一个最简单的log文件: test_logging5.py

#coding:utf-8
import logging

logging.debug(logger debug message)
logging.info(logger info message)
logging.warning(logger warning message)
logging.error(logger error message)
logging.critical(logger critical message)

控制台输出结果:

WARNING:root:logger warning message
ERROR:root:logger error message
CRITICAL:root:logger critical message

 

再写个复杂点的,有名字的log文件:test_logging4.py

#coding:utf-8
import logging

logger1 = logging.getLogger(mylogger)
logger1.setLevel(logging.DEBUG)
# 创建一个handler,用于写入日志文件  
fh = logging.FileHandler(./log/test.log)
# 再创建一个handler,用于输出到控制台  
ch = logging.StreamHandler()
# 定义handler的输出格式formatter  
formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger1.addHandler(fh)
logger1.addHandler(ch)

logger1.debug(logger1 debug message)
logger1.info(logger1 info message)
logger1.warning(logger1 warning message)
logger1.error(logger1 error message)
logger1.critical(logger1 critical message)

文件和控制台的输出结果:

2015-12-30 02:25:53,866 - mylogger - DEBUG - logger1 debug message
2015-12-30 02:25:53,866 - mylogger - INFO - logger1 info message
2015-12-30 02:25:53,866 - mylogger - WARNING - logger1 warning message
2015-12-30 02:25:53,866 - mylogger - ERROR - logger1 error message
2015-12-30 02:25:53,866 - mylogger - CRITICAL - logger1 critical message

恩,看着也挺正常的。

 

接着,我们把test_logging4.py中加上一句 import test_logging5.py

#coding:utf-8
import logging
import test_logging5

logger1 = logging.getLogger(mylogger)
logger1.setLevel(logging.DEBUG)
# 创建一个handler,用于写入日志文件  
fh = logging.FileHandler(./log/test.log)
# 再创建一个handler,用于输出到控制台  
ch = logging.StreamHandler()
# 定义handler的输出格式formatter  
formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger1.addHandler(fh)
logger1.addHandler(ch)

logger1.debug(logger1 debug message)
logger1.info(logger1 info message)
logger1.warning(logger1 warning message)
logger1.error(logger1 error message)
logger1.critical(logger1 critical message)

文件中的结果跟上面的一样,但是控制台中的结果变成了:

WARNING:root:logger warning message
ERROR:root:logger error message
CRITICAL:root:logger critical message
2015-12-30 02:44:53,224 - mylogger - DEBUG - logger1 debug message
DEBUG:mylogger:logger1 debug message
2015-12-30 02:44:53,225 - mylogger - INFO - logger1 info message
INFO:mylogger:logger1 info message
2015-12-30 02:44:53,225 - mylogger - WARNING - logger1 warning message
WARNING:mylogger:logger1 warning message
2015-12-30 02:44:53,225 - mylogger - ERROR - logger1 error message
ERROR:mylogger:logger1 error message
2015-12-30 02:44:53,225 - mylogger - CRITICAL - logger1 critical message
CRITICAL:mylogger:logger1 critical message

分析一下:

最前面的那3条是test_logging5.py执行后的结果

但是,后面mylogger的打印却出现了两次,分别以我们设置的格式和默认的root格式打印了一遍。

这说明不同文件间的log系统是相互影响的,在test_logging5.py中我们用到了默认的log,在test_logging4.py中就会认为有root log的存在,并由于日志间的继承关系导致root和mylogger都各自打印一遍日志。简言之,就是先打开的文件中对log的设置,后打开的文件都会受到影响

 

 

那么,我们想让mylogger的内容只打印一遍怎么办呢?

方法是,把test_logging5.py中的logger加个名字,不要用默认的root logger

把test_logging5.py改成

#coding:utf-8
import logging

logger2 = logging.getLogger(mylogger2) 
ch = logging.StreamHandler()
formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
ch.setFormatter(formatter)
logger2.addHandler(ch)


logger2.debug(logger debug message)
logger2.info(logger info message)
logger2.warning(logger warning message)
logger2.error(logger error message)
logger2.critical(logger critical message)

之后再运行test_logging4.py。结果就成了:

2015-12-30 03:06:30,566 - mylogger2 - WARNING - logger warning message
2015-12-30 03:06:30,566 - mylogger2 - ERROR - logger error message
2015-12-30 03:06:30,566 - mylogger2 - CRITICAL - logger critical message
2015-12-30 03:06:30,566 - mylogger - DEBUG - logger1 debug message
2015-12-30 03:06:30,566 - mylogger - INFO - logger1 info message
2015-12-30 03:06:30,567 - mylogger - WARNING - logger1 warning message
2015-12-30 03:06:30,567 - mylogger - ERROR - logger1 error message
2015-12-30 03:06:30,567 - mylogger - CRITICAL - logger1 critical message

看,符合预期了~

 

建议:在有多个相互关联的文件都需要用到python的日志系统时,不要用默认的root logger。因为所有的名称都会继承root导致重复打印。用logger时一定要起名字!!

 

【python】多个文件共用日志系统

标签:

原文地址:http://www.cnblogs.com/dplearning/p/5088074.html

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