更改配置文件';python的动态s格式

更改配置文件';python的动态s格式,python,logging,Python,Logging,关于python日志模块,我有以下问题 我可以从代码动态更改配置文件中定义的格式吗 我的应用程序中的一个模块是否可以通过配置文件配置其格式,而其他模块是否可以通过python脚本配置其格式和其他属性 我想将上下文信息添加到日志中,但我正在使用配置文件定义日志程序属性。我该怎么办 如果需要,我可以提供一些代码和应用程序结构 结构- 1.)代理-调用logging_setup脚本来设置记录器配置 2.)模块 我有一个日志设置脚本,它有以下方法: logging_setup.py import log

关于python日志模块,我有以下问题

  • 我可以从代码动态更改配置文件中定义的格式吗

  • 我的应用程序中的一个模块是否可以通过配置文件配置其格式,而其他模块是否可以通过python脚本配置其格式和其他属性

  • 我想将上下文信息添加到日志中,但我正在使用配置文件定义日志程序属性。我该怎么办

  • 如果需要,我可以提供一些代码和应用程序结构

    结构-

    1.)代理-调用logging_setup脚本来设置记录器配置 2.)模块

    我有一个日志设置脚本,它有以下方法:

    logging_setup.py

    import logging
    import logging.handlers
    
    LOGGER_FORMAT="%(asctime)s %(CMDID)s %(levelname)s %(message)s"
    
    class testFormatter(logging.Formatter):
      def format(self,record):
        record.message=record.getMessage()
        if string.find(self._fmt,"%(asctime)") >= 0:
          record.asctime = self.formatTime(record, self.datefmt)
    
        if threading.currentThread().getName() in cmdidDict:
          record.CMDID=cmdidDict[threading.currentThread().getName()]
        else:
          record.CMDID="Oda_EnvId"
        return self._fmt % record.__dict__
    
    def initLogging(loggername,newCMDID):
      global CMDID
      global newCMDID
      logger=logger.getLogger(loggername)
      format=testFormatter(LOGGER_FORMAT)
      *set up other config*
    
    因此,我想在日志中动态设置CMDID变量,这是通过使用testFormatter类并使用该类初始化记录器实现的。还有一点,但我希望你得到的想法

    LOGGER_FORMAT="%(asctime)s %(CMDID)s %(levelname)s"
    
    但是现在我想更改模块本身的日志级别,始终保持格式不变。所以我决定创建一个通用配置文件,可以在整个应用程序中为我设置日志配置。我的问题是如何使此配置文件以以下格式设置CMDID变量

    配置文件

    [loggers]
    keys=root,testModule
    
    [formatters]
    keys=generic
    
    [handlers]
    keys=fh
    
    [logger_root]
    level=DEBUG
    handlers=fh
    
    [logger_testModule]
    level=ERROR        <<-- setting my log level here
    handlers=fh
    qualname=testModule
    propagate=0
    
    [handler_fh]
    class=handlers.RotatingFileHandler
    level=DEBUG
    formatter=generic
    maxBytes=1000
    args=('spam.log',)
    
    [formatter_generic]
    format=%(asctime)s %(levelname)s %(message)s   <<---This should somehow set CMDID var
    
    [记录器]
    keys=root,testModule
    [格式化程序]
    键=通用
    [处理程序]
    钥匙=fh
    [根]
    级别=调试
    处理器=fh
    [记录器测试模块]
    
    level=ERROR我认为可能需要提供代码和应用程序结构

  • 不清楚你改变格式的意思是什么。什么格式

  • 当然。当您为变量_1赋值时,从配置中提取它,然后当您为变量_2赋值时,从其他地方获取值

  • 您希望日志中包含哪些上下文信息?您可以将日志配置为具有非预定字段,并在其中记录变量值。因此,您所要做的就是根据代码中发生的情况设置该变量的值,并将其写入日志

  • 你可以试试这个:

    import sys
    import ConfigParser
    
    CONFIG = ConfigParser.ConfigParser()
    
    CONFIG.read('config.ini')  # This is your Config file
    
    print "BEFORE CHANGE"
    CONFIG.write(sys.stdout)
    
    ## Try printing any option under any section
    #print CONFIG.get('section1', 'option1')
    
    CONFIG.set('section1', 'option1', value=1234)
    
    print "AFTER CHANGE"
    CONFIG.write(sys.stdout)
    
    输出:

    BEFORE CHANGE
    [section1]
    option1 = aaaa
    option2 = bbbb
    
    [sectin2]
    option1 = cccc
    option2 = dddd
    
    AFTER CHANGE
    [section1]
    option1 = 1234
    option2 = bbbb
    
    [sectin2]
    option1 = cccc
    option2 = dddd
    

    请更清楚地说明所需的添加代码…我希望现在已经有点清楚了。尝试使用
    ConfigParser
    并在运行时从config
    部分
    读取不同的日志级别,然后插入它。您能给出一个示例,说明插入它意味着什么吗??你的意思是创建一个新的处理程序并添加它吗?实际上,我只希望在配置文件中指定的格式应该被我在python代码中定义的内容覆盖。我怎样才能做到这一点??