@@ -130,12 +130,7 @@ def __init__(self, app=None, version='1.0', title=None, description=None,
130130 self ._refresolver = None
131131 self .format_checker = format_checker
132132 self .namespaces = []
133- self .default_namespace = self .namespace (default , default_label ,
134- endpoint = '{0}-declaration' .format (default ),
135- validate = validate ,
136- api = self ,
137- path = '/' ,
138- )
133+
139134 self .ns_paths = dict ()
140135
141136 self .representations = OrderedDict (DEFAULT_REPRESENTATIONS )
@@ -150,7 +145,14 @@ def __init__(self, app=None, version='1.0', title=None, description=None,
150145 self .resources = []
151146 self .app = None
152147 self .blueprint = None
153-
148+ # must come after self.app initialisation to prevent __getattr__ recursion
149+ # in self._configure_namespace_logger
150+ self .default_namespace = self .namespace (default , default_label ,
151+ endpoint = '{0}-declaration' .format (default ),
152+ validate = validate ,
153+ api = self ,
154+ path = '/' ,
155+ )
154156 if app is not None :
155157 self .app = app
156158 self .init_app (app )
@@ -209,6 +211,9 @@ def _init_app(self, app):
209211 for resource , namespace , urls , kwargs in self .resources :
210212 self ._register_view (app , resource , namespace , * urls , ** kwargs )
211213
214+ for ns in self .namespaces :
215+ self ._configure_namespace_logger (app , ns )
216+
212217 self ._register_apidoc (app )
213218 self ._validate = self ._validate if self ._validate is not None else app .config .get ('RESTPLUS_VALIDATE' , False )
214219 app .config .setdefault ('RESTPLUS_MASK_HEADER' , 'X-Fields' )
@@ -270,6 +275,11 @@ def register_resource(self, namespace, resource, *urls, **kwargs):
270275 self .resources .append ((resource , namespace , urls , kwargs ))
271276 return endpoint
272277
278+ def _configure_namespace_logger (self , app , namespace ):
279+ for handler in app .logger .handlers :
280+ namespace .logger .addHandler (handler )
281+ namespace .logger .setLevel (app .logger .level )
282+
273283 def _register_view (self , app , resource , namespace , * urls , ** kwargs ):
274284 endpoint = kwargs .pop ('endpoint' , None ) or camel_to_dash (resource .__name__ )
275285 resource_class_args = kwargs .pop ('resource_class_args' , ())
@@ -431,6 +441,8 @@ def add_namespace(self, ns, path=None):
431441 # Register models
432442 for name , definition in six .iteritems (ns .models ):
433443 self .models [name ] = definition
444+ if not self .blueprint and self .app is not None :
445+ self ._configure_namespace_logger (self .app , ns )
434446
435447 def namespace (self , * args , ** kwargs ):
436448 '''
0 commit comments