为python动态更改配置文件的格式

时间:2013-12-12 17:36:52

标签: python logging

我有关于python日志记录模块的以下问题。

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

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

  3. 我想在我的日志中添加上下文信息,但我使用配置文件来定义记录器属性。我怎么能这样做?

  4. P.S。如果需要,我可以提供一些代码和应用程​​序结构。

    结构 -

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

    我有一个logging_setup脚本,它具有以下方法:

    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来实现的。还有一点,但我希望你明白这一点。

    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
    

2 个答案:

答案 0 :(得分:0)

我认为可能需要提供代码和应用程​​序结构。

  1. 通过更改格式不清楚您的意思。什么格式?

  2. 不确定。当你为variable_1分配一个值时,从配置中取出它,然后在你指定variable_2时从其他地方获取值。

  3. 您希望日志中包含哪些上下文信息?您可以将日志配置为具有未预先确定的字段,并将变量值记录到其中。因此,您所要做的就是根据代码中的内容设置该变量的值,并将其写入日志。

答案 1 :(得分:0)

你可以试试这个:

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