python日志记录fileConfig fileHandler args Windows目录分隔符

时间:2018-11-01 17:25:01

标签: python logging

我似乎无法使用Windows目录分隔符将带有路径的日志文件名称传递到Windows平台上的记录器。记录器配置:

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

这有效:

logging.config.fileConfig(logger_config_file, defaults={'logfilename': 'test.txt})

这有效:

logging.config.fileConfig(logger_config_file, defaults={'logfilename': 'E:/dddd/rrrr/nnnn/tttt/test.txt'})

如果我尝试:

logging.config.fileConfig(logger_config_file, defaults={'logfilename': 'E:\\dddd\\rrrr\\nnnn\\tttt\\test.txt'})

我收到此异常:

File "C:\Program Files\Python36\lib\logging\config.py", line 84, in fileConfig
handlers = _install_handlers(cp, formatters)
File "C:\Program Files\Python36\lib\logging\config.py", line 148, in _install_handlers
h = klass(*args)
File "C:\Program Files\Python36\lib\logging\__init__.py", line 1030, in __init__
StreamHandler.__init__(self, self._open())
File "C:\Program Files\Python36\lib\logging\__init__.py", line 1059, in _open
return open(self.baseFilename, self.mode, encoding=self.encoding)
OSError: [Errno 22] Invalid argument: 'E:\\dddd\rrrr\nnnn\tttt\test.txt'

我想使用os.path.join构建此路径。那将使用“ \\” Windows目录分隔符。该代码应该在Windows和Linux系统上运行。

我应该将linux样式分隔符放入fileConfig中,还是一个bug?重新格式化为Linux样式分隔符的简单解决方案看起来像什么? 谢谢

编辑:

如果我这样构建路径,则os.path.join()将添加Windows分隔符:

logging_path = os.path.join('E:/dddd/tttt', 'rrrr')
logging_file = os.path.join(logging_path, 'test.txt')

结果为:“ E:/ dddd / tttt \\ rrrr \\ test.txt”

这是一条可行的路径,因为这可行:

open(logging_file)

这仍然会失败:

logging.config.fileConfig(logger_config_file, defaults={'logfilename': logging_file})

我找到了解决方案。这有效:

logging.config.fileConfig(logger_config_file, defaults={'logfilename': logging_file.replace('\\', '/'})

我不确定我是否应该不将Windows分隔符放入fileConfig或fileConfig是否可以更好地处理。无论如何,我希望这会有所帮助。

0 个答案:

没有答案