logging模块在控制台输出中添加前导空格
编辑:这些空白是因为代码中某个深层次的子函数里有一句不太明显的语句添加的。一旦把它去掉,日志输出就正常了……所以我就不再讨论这个问题了。
把控制台的日志输出重定向到 stderr
让这个问题变得很明显,感谢评论者们的帮助!
我正在使用 Python 的 logging
模块来处理我项目中的日志记录,既记录到文件,也记录到标准输出。这一切都挺顺利的,基于一个配置文件,并且有不同的日志级别。
问题是:在标准输出中,行的开头有空白。这似乎和两次写入之间的时间有关(大概是每秒一个空格)。
我肯定是在日志配置文件中犯了错误,因为我对这个不太熟悉,但我找不到具体问题出在哪里。把所有的日志级别都改成一样的也没有用。有人能帮帮我吗?
报告文件内容:
2011-10-11 17:25:43,911 : INFO : P-Tool : P-Tool launched from command-line
2011-10-11 17:25:43,927 : INFO : P-Tool : Starting instantiation of tools
2011-10-11 17:25:43,959 : INFO : P-Tool : Initialization completed
2011-10-11 17:25:43,959 : INFO : P-Tool : Execution started
2011-10-11 17:25:44,973 : WARNING : P-Tool : Process Project File CRC check FAILED, [...]
2011-10-11 17:25:44,973 : INFO : P-Tool : XSD version check passed: Process [...]
2011-10-11 17:25:44,973 : ERROR : P-Tool : XSD validation FAILED for Process[...]
2011-10-11 17:25:44,973 : INFO : P-Tool : Process Call found, ID: 1, short name: [...]
2011-10-11 17:25:44,973 : INFO : lib.tools.I-Tool : importing AC_ICD: [...]
2011-10-11 17:25:52,983 : INFO : lib.tools.I-Tool : importing AC_ICD: [...]
2011-10-11 17:26:00,009 : INFO : lib.tools.V-Tool : verifying project [...]
标准输出:
INFO : P-Tool : P-Tool launched from command-line
INFO : P-Tool : Starting instantiation of tools
INFO : P-Tool : Initialization completed
INFO : P-Tool : Execution started
WARNING : P-Tool : Process Project File CRC check FAILED, [...]
INFO : P-Tool : XSD version check passed: Process Project [...]
ERROR : P-Tool : XSD validation FAILED for Process Project [...]
INFO : P-Tool : Process Call found, ID: 1, short [...]
INFO : lib.tools.I-Tool : importing AC_ICD: [...]
INFO : lib.tools.I-Tool : importing AC_ICD: [...]
INFO : lib.tools.V-Tool : verifying project [...]
ERROR : P-Tool : no CRC found in "Project\Rep[...]
INFO : lib.tools.G-Tool : generating binary for [...]
ERROR : P-Tool : no CRC found in "Project\Reports[...]
INFO : lib.tools.LAF Writer : LAF writing started, [...]
(注意这些行是以空白开头的)
这是我配置 logging
模块的方式:
# in the module p_tool.py
# defining the logging
LOG_CONFIG = 'logging.conf'
logging.config.fileConfig(os.path.join(os.path.split(__file__)[0],
'resources',
LOG_CONFIG))
logger = logging.getLogger('P-Tool')
[...]
# adding some message
logger.info('message to logger')
还有日志配置文件:
# logging.conf
[loggers]
keys=root,P-Tool
[handlers]
keys=consoleHandler,logFileHandler
[formatters]
keys=consoleFormatter,fileFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler,logFileHandler
[logger_P-Tool]
level=DEBUG
handlers=consoleHandler,logFileHandler
qualname=P-Tool
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=consoleFormatter
args=(sys.stdout,)
[handler_logFileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('p_tool_log.txt','w')
[formatter_fileFormatter]
format=%(asctime)s : %(levelname)s : %(name)s : %(message)s
datefmt=
[formatter_consoleFormatter]
format=%(levelname)s : %(name)s : %(message)s
datefmt=
1 个回答
1
如上所述,我在代码中犯了两个错误。因此,logging
模块或者我对它的配置没有问题。
那些空白是因为代码中一个不太明显的语句造成的,那个语句在一个子函数的深处。把它去掉后,日志输出就正常了……所以我就不再讨论这个问题了。
把控制台的日志重定向到stderr
让这个问题变得很明显,感谢评论的朋友们!