记录不是写变量值而是其他一切

Logging not writing variable values but everything else

我可以使用 logging.info('text') 成功地写入我的日志文件。

但是,调用我所有 类 中的所有 self. 变量 不会 写入日志文件。

然而,print() 将它们的值显示到控制台。

例如:logging.info('__getitem__')出现在日志文件中ok;但不是任何变量。

import logging

def main():
    logging.basicConfig(filename='ontology_tagger.log', level=logging.INFO)
    logging.info('Started')
    run_some_code()
    logging.info('Finished')

if __name__ == '__main__':
    main()

进一步调用:

logging.info('__getitem__') # CHECK LOG FILE BELOW
y = 100
print(y)
logging.info('y = ', y)

日志文件:

INFO:root:Started
INFO:root:__getitem__
INFO:root:Finished

控制台 | print(y):

100

日志记录不允许您直接将字符串文字与变量连接起来。

所以,而不是:

logging.info('y =', y)

使用logging提供的格式化机制;第一个参数是一个格式字符串,然后你可以传入尽可能多的附加参数,因为它有占位符。

logging.info('y = %i', y)

当然,你也可以安排你的代码,让它只传入一个字符串,但这往往效率较低(f-strings,显式 format,或使用 % 运算符连接字符串,这有点低效,而且如果您组合的字符串实际上没有记录在任何地方,则完全是浪费,因为您关闭了此级别的日志记录)。

logging.info(f'y = {y}')

另一种(粗略的)替代方法:

logging.info('y =')
logging.info(y)