我正在使用 Python 的日志记录模块将一些调试字符串记录到一个运行良好的文件中。现在另外,我想使用这个模块将字符串打印到标准输出。我该怎么做呢?为了将我的字符串记录到文件中,我使用以下代码:
import logging import logging.handlers logger = logging.getLogger("") logger.setLevel(logging.DEBUG) handler = logging.handlers.RotatingFileHandler( LOGFILE, maxBytes=(1048576*5), backupCount=7 ) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler.setFormatter(formatter) logger.addHandler(handler)
然后调用一个记录器函数
logger.debug("I am written to the file")
在这里感谢您的帮助!
只需获取根记录器的句柄并添加StreamHandler. 对标准错误的StreamHandler写入。不确定您是否真的需要 stdout 而不是 stderr,但这是我在设置 Python 记录器时使用的,我也添加了FileHandler。然后我所有的日志都去这两个地方(这听起来像你想要的)。
StreamHandler
FileHandler
import logging logging.getLogger().addHandler(logging.StreamHandler())
如果要输出 tostdout而不是stderr,只需将其指定给StreamHandler构造函数即可。
stdout
stderr
import sys # ... logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
您也可以在其中添加一个Formatter,这样您的所有日志行都有一个共同的标题。
Formatter
IE:
import logging logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s") rootLogger = logging.getLogger() fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, fileName)) fileHandler.setFormatter(logFormatter) rootLogger.addHandler(fileHandler) consoleHandler = logging.StreamHandler() consoleHandler.setFormatter(logFormatter) rootLogger.addHandler(consoleHandler)
打印为以下格式:
2012-12-05 16:58:26,618 [MainThread ] [INFO ] my message