Python 日志记录,终止符作为选项

标签 python python-3.x logging

我想要的: 到处使用日志记录库而不是打印语句。有时不以新行终止是很好的。考虑这个简化的例子:

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/

相关文章:

javascript - 如何使用 winston logger 记录 Node 错误?

python - 从数据帧的两列中提取值以创建键和值的字典

python - 从 PyIDispatch 调用方法

python - Kivy(kv语言)中使用id的引用widget

python - 在 Pygame 中获取键盘输入的更简单方法?

logging - cxf 入站和出站消息记录到单独的日志文件

python - 从 Python 设置的 Redis 值未反射(reflect)在 redis 客户端中

python-3.x - Pandas 如何将 2 列数据框转换为系列?

python-3.x - 删除数据框和 csv 文件中的特定字符

javascript 抽象控制台日志记录