为什么警告日志没有通过我的自定义格式化程序传递?



我试图让每一个日志消息我的python应用程序产生格式化与我的自定义格式化程序。问题是我的应用程序没有记录我的客户格式化程序的所有内容,即这个RunTimeWarning:

__main__:1: RuntimeWarning: divide by zero encountered in true_divide

而我期望的是-即用jsonlogger格式化:

{"name": "root", "funcName": "<module>", "level": null, "lineno": 1, "threadName": "MainThread", "message": "RuntimeWarning: divide by zero encountered in true_divide"}

谁有什么建议,如何修复?我认为分配根记录器使用json_handler就足够了。要复制,这里是代码!


import logging
import os
import sys
import numpy as np
import pandas as pd
from pythonjsonlogger import jsonlogger
from logging import getLogger, config

log_level = os.environ.get("LOG_LEVEL", "INFO")
log_format = "%(name) %(funcName) %(level) %(lineno) %(threadName) %(message)"
config.dictConfig({
'version': 1,
'formatters': {'json': {
'()': jsonlogger.JsonFormatter,
'format': log_format,
}},
'handlers': {
'json_handler': {
'class': 'logging.StreamHandler',
'formatter': 'json',
'level': log_level,
'stream': sys.stdout
}
},
'loggers': {
'': {
'handler': ['json_handler'],
'level': log_level,
'propagate': False
},

},
'root': {
'level': log_level,
'handlers': ['json_handler'],
},
'disable_existing_loggers': True
})
logging.info("test") # this formats
series_raw = pd.Series([0, float('nan'), 1,4,6,-1], [0,1,2,3,4,5])
x = series_raw.values
values = np.where(np.logical_or(x == 0, np.isnan(x)), np.nan, 10 /x) # warning from here does not

成功地将py.warnings重新路由到具有logging.captureWarnings(capture=True)的标准记录器。

最新更新