我已经在互联网、Python官方文档和StackOverflow上搜索了相当长的时间,但似乎找不到一个合适的答案。
我正在按照Python官方的日志记录HOWTO操作 - 我的记录器看起来像这样:
import os, logging
os.chdir("C:/Users/kerfuffle/Desktop/logtest")
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("logging.log")
fh.setLevel(logging.INFO)
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(sh)
logger.debug("debug!")
logger.info("info!")
logger.warning("warning!")
代码的最后 3 行运行良好,我们也通过 StreamHandler 得到了适当的输出。 logging.log - 文件:
2020-05-27 15:41:59,586 - INFO - info!
2020-05-27 15:41:59,586 - WARNING - warning!
控制台输出:
2020-05-27 15:41:59,584 - DEBUG - debug!
2020-05-27 15:41:59,586 - INFO - info!
2020-05-27 15:41:59,586 - WARNING - warning!
我不理解的是以下内容: 如果我故意制造一个错误,我期望它能够被记录到文件中。因此,我将尚未定义的变量"var"添加到我的脚本中:
var += 1
如上所示,我将在控制台中StreamHandler()日志旁边接收标准错误输出:
2020-05-27 15:45:37,444 - DEBUG - debug!
2020-05-27 15:45:37,445 - INFO - info!
2020-05-27 15:45:37,451 - WARNING - warning!
Traceback (most recent call last):
File "c:/Users/kerfuffle/Desktop/logtest/file.py", line 23, in <module>
var += 1
NameError: name 'var' is not defined
我的日志文件仅显示:
2020-05-27 15:45:37,445 - INFO - info!
2020-05-27 15:45:37,445 - WARNING - warning!
根据教程,我知道我可以通过以下方式尝试转义所有内容:
try:
var += 1
except Exception:
logger.exception("You moron! Don't do that") #or
logger.error('What a stupid error!')
然而,如果用户无法预测或主要不会预料到错误,我该如何捕获并将它们写入日志文件呢?(=>因此不能使用try/except)
有时候你在发生错误之前是无法预知的。例如当我通过cronjob运行脚本时。
谢谢您的回复! :-)