Error when config logging use logging.config.dictConfig in python
Question: First of all , I am using python.Try to config logging by a config json file
and use **logging.config.dictConfig()** .I used it before and it work well.
But this time I delete a little bit and some how it just doesn't work. My
config file will look like this:

    
    
    {
        "version": 1,
        "disable_existing_loggers": false,
        "formatters": {
            "simple": {
                "format": "%(name)-6s | %(levelname)-8s | %(message)s"
            },
            "info_format": {
                "format": "%(name)-6s | %(levelname)-6s | %(message)s"
            },
            "error_format": {
                "format": "%(filename)-8s | %(module)-12s | %(funcName)s | %(lineno)d : %(message)s"
            },
            "debug_format": {
                 "format": "%(filename)-8s | %(module)-12s | %(funcName)s | %(lineno)d : %(message)s"
            }
        },
        "handlers": {
            "console": {
                 "class": "logging.StreamHandler",
                 "level": "DEBUG",
                 "formatter": "simple",
                 "stream": "ext://sys.stdout"
            },
            "info_handler": {
                "level": "INFO",
                "formatter": "info_format",
                "encoding": "utf8",
                "stream": "ext://sys.stdout"
            },
            "error_handler": {
                "level": "ERROR",
                "formatter": "error_format",
                "encoding": "utf8",
                "stream": "ext://sys.stderr"
            }
        },
        "loggers": {
            "info": {
                 "level": "INFO",
                 "handlers": ["console"],
                 "propagate": "no"
             },
             "error": {
                 "level": "ERROR",
                 "handlers": ["console"],
                 "propagate": "no"
             },
             "tornado.access": {
                 "level": "INFO",
                 "handlers": ["console"],
                 "propagate": "no"
             },
             "tornado.general": {
                 "level": "INFO",
                 "handlers": ["console"],
                 "propagate": "no"
             },
             "tornado.application": {
                 "level": "ERROR",
                 "handlers": ["console"],
                 "propagate": "no"
             }
        }
    
    }
    

Here is how I config logging:

    
    
    configParser = ConfigParser.ConfigParser()
    __ProjectPath = os.getcwd()
    config_path = __ProjectPath + "/configs/logconfig.json"
    with open(config_path, 'rt') as f:
        configs = json.loads(f.read())
        logging.config.dictConfig(configs)
    

That is the error message:

    
    
    Traceback (most recent call last):
      File "/home/jonah/code/leancloud-demo/wsgi.py", line 13, in <module>
        from app import app
      File "/home/jonah/code/leancloud-demo/app.py", line 14, in <module>
        import log
      File "/home/jonah/code/leancloud-demo/log.py", line 51, in <module>
        logging.config.dictConfig(configs)
      File "/usr/lib/python2.7/logging/config.py", line 794, in dictConfig
        dictConfigClass(config).configure()
      File "/usr/lib/python2.7/logging/config.py", line 576, in configure
        '%r: %s' % (name, e))
    ValueError: Unable to configure handler u'error_handler': 'NoneType' object has no attribute 'split'
    
    Process finished with exit code 1
    

I had google for a while,just can not a answer.Sorry for my poor English.


Answer: Read <https://docs.python.org/2/library/logging.config.html#dictionary-schema-
details>

    
    
    // class (mandatory). This is the fully qualified name of the handler class
    
    "info_handler": {
        "class": "logging.StreamHandler",
        "level": "INFO",
        "formatter": "info_format",
        "stream": "ext://sys.stdout"
    },
    "error_handler": {
        "class": "logging.StreamHandler",
        "level": "ERROR",
        "formatter": "error_format",
        "stream": "ext://sys.stderr"
    }
    

