yawn1122 large avatar
测试学习小组  ›  python接口自动化

logging 多模块使用,如何保证使用的是同一个logger

By yawn1122 at 一年前 , 380 次浏览

主文件 main.py,配置了logging.config.fileConfig,timeit.py计算运行函数消耗的时间,timeit.py 的 log 只在 console 里有,mylog.log 里没有,帮忙看下应该怎么写才对,现在看两个文件的 logger 不是同一个 logger

logging.conf

[loggers]
keys=root,sLogger

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=fileFormatter,consoleFormatter

[logger_root]
level=NOTSET
handlers=consoleHandler

[logger_sLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=sLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('%(logfilename)s',)

[formatter_fileFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

[formatter_consoleFormatter]
format=%(asctime)s - %(levelname)s - %(message)s
datefmt=

main.py

import time
import logging.config
import timeit

@timeit.timeit
def func1():
time.sleep(1)

@timeit.timeit
def func2():
time.sleep(2)

if __name__ == '__main__':
logging.config.fileConfig('logging.conf', defaults={'logfilename': 'mylog.log'})
logger = logging.getLogger('sLogger')
logger.info('Start at {}'.format(time.asctime()))
func1()
func2()
logger.info('End at {}'.format(time.asctime()))

timeit.py

import time
import logging

logger = logging.getLogger('sLogger')

def timeit(func):
def wrapped(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
t = '%.2f' % (t2 - t1)
logging.debug('{} costs {} s.'.format(func.__name__, t))
return result
return wrapped

@虫师 @乙醇

5 回复
乙醇 medium avatar
#1 - 一年前
乙醇

logger作为全局变量的话就可以了吧?

乙醇 medium avatar
#3 - 一年前
乙醇

在全局作用域定义个变量就好了。

yawn1122 medium avatar
#5 - 一年前
yawn1122

发现timeit.py写错一个地方,logger.debug('{} costs {} s.'.format(func.name, t))

测试学习小组 — 软件测试学习讨论区
现在注册
已注册用户请 登入
内容分享

欢迎关注我们的公众号: 测试圈TC


小贴士

你的问题在测试教程网中能找到答案