首页 > 解决方案 > Python 日志在写入文件时添加了额外的换行符(但不是标准输出)

问题描述

我在 Windows 7 上设置了一个 Python (3.6.5) 记录器,以同时写入文件和标准输出,如下所示:

def __filehandler() -> logging.FileHandler:
    filehandler = logging.FileHandler(LOGFILE, encoding="cp932")
    filehandler.setLevel(logging.DEBUG)
    fformatter = logging.Formatter("%(asctime)s: %(name)-13s: %(levelname)-8s: %(message)s")
    filehandler.setFormatter(fformatter)

    return filehandler


def __streamhandler() -> logging.StreamHandler:
    streamhandler = logging.StreamHandler()
    streamhandler.setLevel(logging.DEBUG)
    sformatter = logging.Formatter("%(name)-13s: %(levelname)-8s: %(message)s")
    streamhandler.setFormatter(sformatter)

    return streamhandler


def getlogger(calling_module_name: str) -> logging.Logger:
    logger = logging.getLogger(calling_module_name)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(__filehandler())
    logger.addHandler(__streamhandler())

    return logger

然后使用它调用logger.info(some_text)

标准输出看起来像预期的那样

mymodule: INFO    : Reading file #1/2, line #42/164: /****************************************************************************/
mymodule: INFO    : Writing file #1/2, line #42/164: /****************************************************************************/
mymodule: INFO    : Reading file #1/2, line #43/164:
mymodule: INFO    : Writing file #1/2, line #43/164:
mymodule: INFO    : Reading file #1/2, line #44/164:
mymodule: INFO    : Writing file #1/2, line #44/164:

但在相应的文件中,还有其他未说明的换行符

2019-05-17 12:21:11,824: mymodule: INFO    : Reading file #1/2, line #42/164: /****************************************************************************/

2019-05-17 12:21:11,824: mymodule: INFO    : Writing file #1/2, line #42/164: /****************************************************************************/
2019-05-17 12:21:11,824: mymodule: INFO    : Reading file #1/2, line #43/164: 

2019-05-17 12:21:11,824: mymodule: INFO    : Writing file #1/2, line #43/164: 

2019-05-17 12:21:11,824: mymodule: INFO    : Reading file #1/2, line #44/164: 

2019-05-17 12:21:11,839: mymodule: INFO    : Writing file #1/2, line #44/164: 

更改filehandler = logging.FileHandler(LOGFILE, encoding="cp932")filehandler = logging.FileHandler(LOGFILE)没有效果。

添加的换行符不利于日志的清晰度,并且会不必要地扩大其大小。有什么想法吗?

标签: pythonloggingnewline

解决方案


推荐阅读