我用pythonnet构建了一个使用C代码的python库(它是作为dll构建和存储的)。在这个库中,我使用python记录器生成日志。
我的图书馆.py
logger = logging.getLogger('mylibrary')
logger.info('logging from my library')
根记录器是根据用户代码配置的。例如,根记录器的处理程序是由用户使用logger的“addhandler()”方法设置的,该方法指定了格式、输出文件等(记录器信息()…)不配置任何内容,用户设置的根处理程序负责将此内容写入文件。
用户代码.py
^{pr2}$用户可以通过设置“我的库”使用的记录器的级别来控制“我的库”可以记录的内容。下面的一行用户代码.py将“我的库”的日志记录级别设置为“关键”,以便库无法记录低于该级别的任何内容(记录器信息()无法进入abc日志).
getLogger('mylibrary').setLevel(CRITICAL)
问题现在来了。因为我在我的库中使用C代码
所以这条线
getLogger('mylibrary').setLevel(CRITICAL)
在用户代码.py现在应该确保只有python和C中的关键日志进入abc日志
有什么办法可以做到的?
不,您不能同时从Python和C登录到同一个文件。可能是因为多个写日志的人没有把日志记录在一起。在
如果您不拥有C#dll,那么您可能会走运,除非它允许您从C#程序配置日志文件/级别,否则Python无法解决它。但是,如果您控制源代码并且可以构建一个新的dll,请考虑更改C#类以允许您传入一个委托/lambda(假设这是在PythonNet中实现的),它将简单地调用Python的logger函数。在
示例:
代码:
python代码:
^{pr2}$类似的东西-在Python的日志级别和C的日志级别之间没有神奇的转换,所以您需要在那里进行一些转换(或者我上面使用的getattr反射)。在
相关问题 更多 >
编程相关推荐