使用配置文件登录Python - 使用通过代码在文件中定义的处理程序

Red*_*ron 11 python logging python-2.x

我正在使用python的日志模块.如何从代码中访问配置文件中定义的处理程序.作为一个例子,我有一个定义的记录器和两个处理程序 - 一个用于屏幕,另一个用于文件.我想根据用户偏好使用适当的处理程序(无论他们是想登录屏幕还是文件).如何从配置文件中定义的记录器动态添加和删除配置文件中定义的处理程序?

[loggers]

keys=root,netmap

[handlers]
keys=fil,screen

[logger_root]
level=NOTSET
handlers=

[logger_netmap]
level=INFO
handlers=fil,screen
qualname=netmap

[formatters]
keys = simple

[formatter_simple]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

[handler_fil]
class=handlers.RotatingFileHandler
args=('file.log','a','maxBytes=10000','backupCount=5')
formatter=simple

[handler_screen]
class=StreamHandler
args = (sys.stdout,)
formatter=simple
Run Code Online (Sandbox Code Playgroud)

根据用户是否使用-v运行程序,我需要使用File或Screen Handler之一.如何从netmap记录器添加或删除fil或screen处理程序?

Iac*_*cks 5

不必动态更改配置文件,只需使用Logger.addHandler(处理程序).

fileHandler = logging.handlers.RotatingFileHandler('file.log', mode='a', maxBytes=10000, backupCount=5)
logger = logging.getLogger('netmap')

if LOG_TO_FILE:
    logger.addHandler(fileHandler)
Run Code Online (Sandbox Code Playgroud)

然后从可能相同的文件加载格式;

import ConfigParser
configParser = ConfigParser.ConfigParser()
config.read('config.ini')

format = config.get('formatter_simple', 'format')
fileHandler.setFormatter(format)
Run Code Online (Sandbox Code Playgroud)

  • 在配置文件中引用处理程序的唯一方法是使用ConfigParser.如果你把它拿回一个级别,并使用两个不同的记录器而不是两个不同的句柄怎么样? (2认同)