我想要的: 到处使用日志记录库而不是打印语句。有时不以新行终止是很好的。考虑这个简化的例子:
for file in files:
print('Loading {}'.format(file), end='', flush=True)
try:
data = load(file)
print('\rLoaded {}'.format(file))
except:
print('\rFailed loading {}'.format(file))
最明显的方法是使用:
handler = logging.StreamHandler()
handler.terminator = ""
但是,我不想向我的库中添加处理程序,而且我确实希望我的主记录器的默认行为是以新行终止。以“”结尾感觉应该是异常(exception),而不是规则。
有没有办法让我做类似的事情:
logger.info(msg, terminator="")
无需为日志记录模块创建大量子类?
我对这个问题的看法是否合理,或者是否有更好的处理方式?
最佳答案
我有一个类似的问题,这就是我用来获得我想要的结果的方法,似乎与您想要实现的结果相似:
import logging
def getLogger(name, fmt="[%(asctime)s]%(name)s<%(levelname)s>%(message)s",
terminator='\n'):
logger = logging.getLogger(name)
cHandle = logging.StreamHandler()
cHandle.terminator = terminator
cHandle.setFormatter(logging.Formatter(fmt=fmt, datefmt="%H:%M:%S"))
logger.addHandler(cHandle)
return logger
logger = getLogger(r'\n', terminator='\n')
rlogger = getLogger(r'\r', terminator='\r')
logger.setLevel(logging.DEBUG)
rlogger.setLevel(logging.DEBUG)
logger.info('test0')
logger.info('test1')
logger.info('-----------------------\n')
rlogger.info('test2')
rlogger.info('test3\n\n')
for i in range(100000):
rlogger.info("%d/%d", i + 1, 100000)
rlogger.info('\n')
结果:
[14:48:00]\n<INFO>test0
[14:48:00]\n<INFO>test1
[14:48:00]\n<INFO>-----------------------
[14:48:00]\r<INFO>test3
[14:48:04]\r<INFO>100000/100000
关于Python 日志记录,终止符作为选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39507711/