52

我有一个用于记录到控制台的日志记录配置文件和一个具有不同格式和级别的文件。在我的 python 脚本中,我可以加载这个配置,基本上控制台和文件输出都可以。

我在配置文件中设置了文件名,如下所示。

是否可以在 python 脚本本身中设置该文件名?

蟒蛇代码:

# set up logging
logging.config.fileConfig(loginipath)
logger = logging.getLogger('sLogger')

# log something
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

日志记录配置文件:

[loggers]
keys=root,sLogger

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=fileFormatter,consoleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_sLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=sLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('logfile.log',)

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

[formatter_consoleFormatter]
format=%(levelname)s - %(message)s
datefmt=
4

3 回答 3

59

像这样更改您的handler_fileHandler部分:

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('%(logfilename)s',)

然后defaults在 fileConfig 调用中添加一个参数

logging.config.fileConfig(loginipath, defaults={'logfilename': '/var/log/mylog.log'})
于 2013-11-27T13:11:38.597 回答
13

两个处理程序都为我工作:

(1)

logging.config.fileConfig( 'logging.ini' , disable_existing_loggers=False)


[handler_myhandler1]
class=FileHandler
level=DEBUG
formatter=form01
args=('python.log', 'w')

(2)

logging.config.fileConfig( 'logging.ini' , disable_existing_loggers=False, defaults={ 'logfilename' : getSomeName() } )

[handler_myhandler2]
class=FileHandler
level=DEBUG
formatter=form01
args=('%(logfilename)s','w')

在阅读https://docs.python.org/2/library/logging.config.html上的示例后

于 2018-03-31T16:04:41.197 回答
0

尝试在设置文件名logging.config.dictConfig()之后调用。fileConfig()

于 2013-03-02T12:30:21.080 回答