Python将basicConfig记录到文件和bash

时间:2018-05-17 18:38:26

标签: python logging

如何设置基本日志记录以写入日志文件并将输出打印到终端?

我使用basicConfig设置模块和子模块的日志记录。

问题: 如果我使用logging.basicConfig(filename = LOGFILE,...),则日志记录模块不再有终端输出。 如果我为日志文件添加另一个FileHandler,则仅由主模块使用,而不是由子模块使用,例如:

if __name__ == "__main__":
    logging.basicConfig(
        level=logging.DEBUG,
        format="%(name)s (%(lineno)s): %(message)s",
        filename=LOGFILE
        )
    # add logfile   
    formatter = logging.Formatter("%(name)s (%(lineno)s): %(message)s")
    logfile = logging.FileHandler(LOGFILE)
    logfile.setLevel("DEBUG")
    logfile.setFormatter(formatter)

使用Python 2.7

更新

刚刚找到https://stackoverflow.com/a/13733863/1907997,但示例不起作用,终端或文件上没有输出:

if __name__ == "__main__":
    logFormatter = "%(name)s (%(lineno)s): %(message)s"
    rootLogger = logging.getLogger()

    fileHandler = logging.FileHandler(LOGFILE)
    fileHandler.setFormatter(logFormatter)
    fileHandler.setLevel("DEBUG")

    rootLogger.addHandler(fileHandler)

    consoleHandler = logging.StreamHandler()
    consoleHandler.setFormatter(logFormatter)
    consoleHandler.setLevel("DEBUG")

    rootLogger.addHandler(consoleHandler)

有关较新Python版本的信息:

。 由于Python 3.3 logging.basicConfig()可以采用关键字参数处理程序 https://stackoverflow.com/a/46098711/1907997

1 个答案:

答案 0 :(得分:0)

刚刚找到解决方案:

logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s - %(name)s (%(lineno)s) - %(levelname)s: %(message)s",
    datefmt='%Y.%m.%d %H:%M:%S', 
    filename=LOGFILE
    )

rootLogger = logging.getLogger("")
logFormatter = logging.Formatter("%(asctime)s - %(name)s (%(lineno)s) - %(levelname)s: %(message)s")
consoleHandler = logging.StreamHandler()
consoleHandler.setFormatter(logFormatter)
consoleHandler.setLevel("DEBUG")
rootLogger.addHandler(consoleHandler)

在此处找到:https://stackoverflow.com/a/23681578/1907997