我有一个Python脚本,它利用日志记录模块将消息记录到文件中。在大多数情况下,它工作正常,但在我的一些同事的机器上,它将每个导入模块的每条消息记录到控制台窗口。似乎没有任何关于为什么它在某些机器上工作而不在其他机器上工作的模式。
以下是我设置记录器的方法
logger = logging.getLogger(__name__)
if __name__ == "__main__":
args = parser.parse_args()
logging.basicConfig(handlers=[logging.NullHandler()]) #do this so that imported modules don't screw with logging
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(args.log)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info(str(args))
main(args)
首先,我将记录器设置为全局变量,然后使用basicConfig将根处理程序设置为NullHandler(),这样任何导入的模块都不会记录我的日志文件或控制台窗口的任何内容,最后我设置我的记录器以记录到程序参数中提供的日志文件。
这完全适用于我在我的机器上的操作,日志文件仅在我使用logger
对象时写入。没有日志消息传递到我的控制台窗口,并且导入的模块中没有日志消息转到我的日志文件。
但是,在一些随机机器上,每次调用logging
或logger
都会进入控制台窗口。日志文件中的日志是可以的,它们只显示我期望的日志(使用logger
调用的日志)。
例如,当我做logger.info(str(args))
时,
INFO: Namespace(arg1='Foo', arg2='Bar', arg3='foobar')
输出到控制台窗口。
我无法想到在不同的机器上表现不同的任何原因。它是完全相同的脚本,相同版本的python,以及相同版本的日志记录。有什么想法吗?