在Python中获取日志

2024-09-29 00:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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代码

  1. 我想把C#日志记录到abc日志在
  2. 我还想像配置python日志一样配置C#日志

所以这条线

getLogger('mylibrary').setLevel(CRITICAL) 

在用户代码.py现在应该确保只有python和C中的关键日志进入abc日志

有什么办法可以做到的?


Tags: 文件方法代码用户py处理程序内容logging
1条回答
网友
1楼 · 发布于 2024-09-29 00:22:48

不,您不能同时从Python和C登录到同一个文件。可能是因为多个写日志的人没有把日志记录在一起。在

如果您不拥有C#dll,那么您可能会走运,除非它允许您从C#程序配置日志文件/级别,否则Python无法解决它。但是,如果您控制源代码并且可以构建一个新的dll,请考虑更改C#类以允许您传入一个委托/lambda(假设这是在PythonNet中实现的),它将简单地调用Python的logger函数。在

示例:

代码:

public class CoolImportedFeature
{
    private readonly Action<string> LogCallback;

    public CoolImportedFeature(string inputA, int inputB, Action<string, string> logCallback)
    {
        LogCallback = logCallback;
        // do other constructor stuff
    }

    public void SomeMethod()
    {
        // do something
        LogCallback("critical", "An error occurred");
    }
}

python代码:

^{pr2}$

类似的东西-在Python的日志级别和C的日志级别之间没有神奇的转换,所以您需要在那里进行一些转换(或者我上面使用的getattr反射)。在

相关问题 更多 >