logging 是对程序运行中的日志进行输出记录,用户在程序中设置在哪个地方输出什么信息,方便进行之后问题的排查。
logging输出有两种方式:输出至控制台 、 输出至文件
输出至控制台:
import logging logging.warning('Watch out!') logging.info('I told you so')
运行上述代码,我们会在控制台看到如下输出:
WARNING:root:Watch out!
info消息并没有出现,这是因为logging默认的输出等级是warn 。
如果想要更改logging的输出等级:在使用logging输出日志前加上语句: logging.basicConfig(level=logging.INFO)
输出至文件:
import logging logging.basicConfig(filename="mylog.log") logging.info("I told you so") logging.warning("Watch out!")
通过在logging.basicConfig 中设置filename,就可以将日志信息输出至指定文件中保存了。同样,默认等级还是Warn。
多次运行上述代码,会发现每次输出的日志信息都会追加在文件后面。
如果想要每次都清空之前的日志信息:使用 filemode 参数,设置 filemode = "w" 。 如果不设置,filemode 默认为 "a"
logging.basicConfig(filename="mylog.log", filemode="w", level=logging.INFO)
另外,对于basicConfig() 的调用应该在 info()、warning() 的前面: 因为他被设定为一次性的配置,只有第一次调用会产生操作,随后调用不会再生效(如果没有在一开始指定,那么就会走默认的配置)
自定义日志展示格式:
如果想在每条日志上展示更多的信息,如显示等级、时间日期、模块、行数等,使用basicConfig 中的 format参数来实现
import logging logging.basicConfig(filename="mylog.log", filemode="w", level=logging.INFO, format='%(asctime)s %(name)s %(levelname)s %(module)s:%(lineno)d %(message)s') logging.info("I told you so") logging.warning("Watch out!") # 文件日志展示 2021-10-29 15:50:13,378 root INFO file_logging:10 I told you so 2021-10-29 15:50:13,380 root WARNING file_logging:11 Watch out!
日期/时间展示的默认格式如上,如果想要更多的控制日期/时间展示格式,使用datefmt参数
import logging logging.basicConfig(filename="mylog.log", filemode="w", level=logging.INFO, format='%(asctime)s %(name)s %(levelname)s %(module)s:%(lineno)d %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') logging.info("I told you so") logging.warning("Watch out!") # 文件日志展示 10/29/2021 03:53:03 PM root INFO file_logging:10 I told you so 10/29/2021 03:53:03 PM root WARNING file_logging:11 Watch out!