Python记录重复的日志条目

时间:2017-05-25 17:43:06

标签: python

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

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

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

当我记录时,同一个日志条目在控制台上被写两次。

我没有看到从logging.config.dictConfig获取logger对象句柄的方法。

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

myLogger.handlers[1]

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

 myLogger.handlers[0] works fine

对于python而言,这是一个全新的品牌,因此在这一点上出乎意料。有谁知道如何解决这个问题?

编辑:

这是dict config 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"
        }
    }
}

1 个答案:

答案 0 :(得分:1)

试试这个

{
    "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"
        }
    }
}

关于你的问题:" 因此,根记录器无论如何都会采取行动?"如果它没有打印到屏幕上,那么它实际上什么都不做。日志消息仍在生成,但您的其他处理程序仍然需要它。

相关问题