我有一个json配置文件并在其中注册自定义记录器,我执行以下操作

logging.config.dictConfig(config)
myLogger = logging.getLogger("myCustomLogger")


调试时,我看到上面的第一行代码在logger对象上调用了getLogger并向其注册了控制台处理程序。
我需要同一个记录器对象的句柄,因此,我再次调用getLogger,我认为它再次注册了相同的处理程序。

当我登录时,同一日志条目在控制台上写入了两次。

我看不到从logging.config.dictConfig获取记录器对象句柄的方法。

我在调试时观察到的奇怪现象是,当断点超过第二行并检查与myLogger关联的处理程序的数量时,它只有1个处理程序。
这就是我在pydev eclipse插件随附的python控制台上检查的方式

myLogger.handlers[1]


它给我一个错误,指出索引不存在。

 myLogger.handlers[0] works fine


对于python来说是相当新的东西,所以在这一点上已经没有想法了。有谁知道如何解决这个问题?

编辑:

这是字典配置json文件

{
    "version": 1,
    "disable_existing_loggers": true,

    "formatters": {
        "custom": {
            "format": "%(asctime)s %(levelname)s [%(applicationName)s,%(applicationState)s] %(message)s"
        }

    },

    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": "INFO",
            "formatter": "custom"
        }
    },

    "root": {
        "level": "INFO",
        "handlers": ["console"]
    },

    "loggers": {
        "myCustomLogger": {
            "level": "INFO",
            "handlers": ["console"],
            "propagate": "false"
        }
    }
}

最佳答案

尝试这个

{
    "version": 1,
    "disable_existing_loggers": true,

    "formatters": {
        "custom": {
            "format": "%(asctime)s %(levelname)s [%(applicationName)s,%(applicationState)s] %(message)s"
        }

    },

    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": "INFO",
            "formatter": "custom"
        }
    },

    "root": {
        "level": "INFO",
        # this is the only difference from your original config file
        "handlers": []
    },

    "loggers": {
        "myCustomLogger": {
            "level": "INFO",
            "handlers": ["console"],
            "propagate": "false"
        }
    }
}


至于您的问题:“那么根记录器无论如何都会起作用?”如果未在屏幕上打印,则实际上无所事事。日志消息仍在生成,但是您的其他处理程序仍然需要它。

关于python - Python记录重复的日志条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44186667/

10-14 18:05
查看更多