【发布时间】:2013-12-12 17:36:51
【问题描述】:
我有以下关于 python 日志记录模块的问题。
能否从代码中动态更改配置文件中定义的格式?
我的应用程序中的一个模块能否通过配置文件配置其格式,而其他模块通过 python 脚本配置其格式和其他属性?
我想将上下文信息添加到我的日志中,但我正在使用配置文件来定义记录器属性。我该怎么办?
附:如果需要,我可以提供一些代码和应用程序结构。
结构 -
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_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
【问题讨论】:
-
请更清楚您的要求
-
添加了代码...希望现在有点清楚了。
-
尝试使用
ConfigParser并在运行时从配置section读取各种日志级别并插入 -
Siva 你能举例说明你插入它是什么意思吗?你的意思是创建一个新的处理程序并添加它??
-
实际上我只是希望配置文件中指定的格式应该被我在 python 代码中定义的内容覆盖。我怎样才能做到这一点??