code: func initFilterLog(c *CompositeMultiHandler, basePath string, config *config.Context) {
  
  	if config != nil {
  		extraLogFlag := config.BoolDefault(SPECIAL_USE_FLAG, false)
  
  		for _, logFilter := range logFilterList {
  			// Init for all filters
  			for _, name := range []string{"all", "debug", "info", "warn", "error", "crit",
  				"trace", // TODO trace is deprecated
  			} {
  				optionList := config.Options(logFilter.LogPrefix + name + logFilter.LogSuffix)
  				for _, option := range optionList {
  					splitOptions := strings.Split(option, ".")
  					keyMap := map[string]interface{}{}
  					for x := 3; x < len(splitOptions); x += 2 {
  						keyMap[splitOptions[x]] = splitOptions[x+1]
  					}
  					phandler := logFilter.parentHandler(keyMap)
  					if extraLogFlag {
  						log.Printf("Adding key map handler %s %s output %s", option, name, config.StringDefault(option, ""))
  						fmt.Printf("Adding key map handler %s %s output %s matching %#v\n", option, name, config.StringDefault(option, ""), keyMap)
  					}
  
  					if name == "all" {
  						initHandlerFor(c, config.StringDefault(option, ""), basePath, NewLogOptions(config, false, phandler))
  					} else {
  						initHandlerFor(c, config.StringDefault(option, ""), basePath, NewLogOptions(config, false, phandler, toLevel[name]))
  					}
  				}
  			}
  		}
  	}
  }
docs: // Init the filter options
  // log.all.filter ....
  // log.error.filter ....