【问题标题】:python logging kwarg failing when passed thru the args sectionpython logging kwarg 在通过 args 部分时失败
【发布时间】:2012-07-31 14:40:04
【问题描述】:

我有以下文件配置部分:

[handler_file]
class = handlers.TimedRotatingFileHandler
args = ( '../output/DataUpload.log', when='D', backupCount=3)
formatter = generic

由 logging.config 指定

from logging import config, getLogger
config.fileConfig( "config/logging.cfg", disable_existing_loggers = True )

我收到以下错误:

  args = eval(args, vars(logging))
  File "<string>", line 1
    ( '../output/DataUpload.log', when='D', backupCount=3)
                                      ^
SyntaxError: invalid syntax

这里不支持 kwargs 还是我做错了什么?

谢谢。

【问题讨论】:

    标签: python logging


    【解决方案1】:

    首先,不要使用 eval(),这是一个非常糟糕的主意! 使用 ConfigParser 或 JSON 或其他东西来存储和加载配置。

    至于错误:

    args = (...,)
    

    这将创建一个 元组。元组不能有命名元素。您想为位置参数使用元组或列表,为命名参数使用字典。如果你使用 JSON 作为配置文件,你会得到这个。

    【讨论】:

    • 我正在使用由 logging.config 指定的配置文件(我已经编辑了原始问题) - 我没有创建任何新内容,也没有在任何地方使用 eval。你的意思是我不应该使用 logging.config 这不是坏主意吗?谢谢科林。
    • +1 不能使用logging.config 传递关键字参数source reference
    • @TokenMacGuy 你的评论才是真正的答案。
    【解决方案2】:

    在python中,如果参数顺序正确,可以通过args变量指定kwargs。如果方法签名发生变化(即:通过更高版本的 python 版本),这会使事情变得不那么可靠。

    Python 3.10.4 的 RotatingFileHandler 类签名为

    RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False, errors=None)
    

    每个超过所需数量的 *args 参数都会自动填充 kwargs。

    假设您只想设置backupCount。如果使用*args 进行设置,则需要将每个 kwarg 填充到特定的那个。

    [handler_file_handler]
    class=logging.handlers.RotatingFileHandler
    level=DEBUG
    formatter=formatter
    args=('%(log_path)s', "a", 10000, 3,)
    

    由于顺序原因,无法只指定backupCount而不设置modemaxBytes

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 1970-01-01
      • 2020-05-19
      • 2013-08-29
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多