【问题标题】:How do I switch to a python log formatter I have defined in my logging.ini file?如何切换到我在 logging.ini 文件中定义的 python 日志格式化程序?
【发布时间】: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


    【解决方案1】:

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

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

    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()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多