如何切换到我在logging.ini文件中定义的Python日志格式化程序?



这是我的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)'

这是一个答案,但不是一个很好的答案。

我只是创建了一个单独的日志配置文件,并像这样切换:

LOG_CONFIG_PROFILE = os.environ.get("LOG_CONFIG_PROFILE", "logging_conf_local")
logging_config_file_path = path.join(
path.dirname(path.abspath(__file__)), f"{LOG_CONFIG_PROFILE}.ini"
)
logging.config.fileConfig(logging_config_file_path)
logger = logging.getLogger()

很想知道是否有更好的方法,或者这个是不是最好的方法。

最新更新