猿问

使Python记录器将除日志文件外的所有消息输出到stdout

除了应该将日志文件放到哪里,是否有办法使用该logging模块使Python日志自动输出到stdout ?例如,我想所有呼叫,,去他们预期的地方,但除了总是被复制到。这是为了避免重复消息,例如:logger.warninglogger.criticallogger.errorstdout


mylogger.critical("something failed")

print "something failed"


阿波罗的战车
浏览 549回答 3
3回答

森林海

所有日志记录输出均由处理程序处理;只需logging.StreamHandler()在根记录器中添加一个即可。这是配置流处理程序(使用stdout而不是默认值stderr)并将其添加到根记录器的示例:import loggingimport sysroot = logging.getLogger()root.setLevel(logging.DEBUG)handler = logging.StreamHandler(sys.stdout)handler.setLevel(logging.DEBUG)formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)root.addHandler(handler)

拉莫斯之舞

您可以为file和stdout创建两个处理程序,然后创建一个handlers参数为的记录器basicConfig。如果两个处理程序具有相同的log_level和format输出,则可能会很有用:import loggingimport sysfile_handler = logging.FileHandler(filename='tmp.log')stdout_handler = logging.StreamHandler(sys.stdout)handlers = [file_handler, stdout_handler]logging.basicConfig(    level=logging.DEBUG,     format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s',    handlers=handlers)logger = logging.getLogger('LOGGER_NAME')
随时随地看视频慕课网APP

相关分类

Python
我要回答