python读取ini文件中的路径不完整_如何获取的相对路径日志.ini以及python中的日志文件...

这篇博客探讨了在Python中如何处理不同模块间共享logging.ini配置文件的问题。作者创建了一个MyFileLogger类,但在不同目录下运行时遇到路径问题。文章详细描述了尝试使用相对路径导致的KeyError,并讨论了在Windows和Linux环境下寻找logging.ini和日志文件的动态解决方案,以避免硬编码绝对路径。
摘要由CSDN通过智能技术生成

我已经创建了一个包装记录器类,它实际上包装了日志模块的功能。我已经创建了它,这样应用程序中使用日志记录的每个类都不需要每次在顶部添加logging.config.fileConfig()和{}。在

我的包装类看起来像这样-class MyFileLogger():

# The config file for logging formatter.

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

def __init__(self, name):

self.logger=logging.getLogger(name)

def log_debug(self, message):

self.logger.debug(message)

logging.ini文件-

^{pr2}$

MyFileLogger.py和logging.ini文件位于同一路径上。我创建testlog.log的目的也与logging.ini文件在同一个路径中。在

实施MyFileLogger.py将类似于-

imp.py-fileLogger = MyFileLogger(__name__)

message = "hey!"

fileLogger.log_debug(message)

现在这个imp.py与MyFileLogger.py和{}不在同一条路径上。这就是为什么当我运行它时,它会给出下面的错误,因为python运行在imp.py路径。在File "C:\Python34\lib\logging\config.py", line 76, in fileConfig

formatters = _create_formatters(cp)

File "C:\Python34\lib\logging\config.py", line 109, in _create_formatters

flist = cp["formatters"]["keys"]

File "C:\Python34\lib\configparser.py", line 937, in __getitem__

raise KeyError(key)

KeyError: 'formatters'

我知道如果我给一个绝对路径到logging.ini和testlog.log它就会工作。但我不想去那里,因为这个应用程序可以在Windows或Linux中运行。所以会出现路径问题。在

现在即使我不关心Windows Linux,只关注Linux。还有一个问题。因此,如果我们假设当前的目录结构是这样的(“ProjectDir/src”被添加到PYTHONPATH中,并且假设每个模块文件夹中都有__init__.py)—ProjectDir

├── src

│ └── sales

│ ├── common

│ │ ├── logger

│ │ │ ├── logging.ini

│ │ │ ├── MyFileLogger.py

│ │ │ └── testlog.log

│ │ └── implmnts

│ │ └── imp.py

│ └── unitTest

│ └── test_MyFileLogger.py

└── bar.txt

假设:

imp.py-fileLogger = MyFileLogger(__name__)

message = "From imp.py"

fileLogger.log_debug(message)

test_MyFileLogger.py-fileLogger = MyFileLogger(__name__)

message = "from test_MyFileLogger.py"

fileLogger.log_debug(message)

如果我运行imp.py,我需要将logging.config.fileConfig('logging.ini', disable_existing_loggers=False)更改为logging.config.fileConfig('../logger/logging.ini', disable_existing_loggers=False)

之后它将运行,但当我尝试运行test_MyFileLogger.py时,我需要再次更改为logging.config.fileConfig('../common/logger/logging.ini', disable_existing_loggers=False)

因此,我的代码取决于我运行的是哪个文件,我想删除它。有什么方法可以动态地获得logging.ini和testlog.log的路径,而不依赖于哪个文件(来自其他路径)来调用它?我不想硬核绝对路径,因为这需要在Windows和Linux下运行,有什么解决方案吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值