【发布时间】:2022-11-18 01:36:13
【问题描述】:
这是我的 logging.ini 文件:
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter,json
[logger_root]
level=INFO
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
formatter=json
args=(sys.stdout,)
[formatter_json]
class=pythonjsonlogger.jsonlogger.JsonFormatter
format=%(asctime)s %(name)s %(levelname)s %(message)s
[formatter_simpleFormatter]
format=%(asctime)s %(name)s - %(levelname)s:%(message)s
我想通过环境变量切换格式化程序,但这不起作用(AttributeError: 'RootLogger' object has no attribute 'setFormatter'):
import logging.config
# Load logging config file
logging_config_file_path = path.join(
path.dirname(path.abspath(__file__)), "logging.ini"
)
logging.config.fileConfig(logging_config_file_path)
# Override log settings via env vars
LOGLEVEL = os.environ.get("LOGLEVEL", "INFO").upper()
LOG_FORMATTER = os.environ.get("LOG_FORMATTER", "simpleFormatter").upper()
LOGLEVEL_NUMBER = logging.getLevelName(LOGLEVEL)
LOGLEVEL_DEBUG_NUMBER = 10
logger = logging.getLogger()
logger.setLevel(LOGLEVEL)
# setFormatter seems to want an object
logger.setFormatter(LOG_FORMATTER
我在 ini 文件中定义了所有设置。如何像我目前为日志级别做的那样通过环境变量切换格式化程序?
编辑
这让我大吃一惊,我一定错过了一些明显的东西。
我尝试将参数传递给配置,但它不起作用,而且我几乎找不到如何使用 defaults 的示例:
logging.config.fileConfig(
logging_config_file_path, defaults={"formatter": "simpleFormatter"}
)
在 logging.ini 中
[handler_consoleHandler]
class=StreamHandler
# formatter=simpleFormatter
formatter='%(formatter)s'
投掷:
configparser.InterpolationSyntaxError: bad interpolation variable reference '%(formatter)'
【问题讨论】:
标签: python python-logging