<br><br><div class="gmail_quote">On Tue, Nov 13, 2012 at 7:57 PM, Jiang, Yunhong <span dir="ltr"><<a href="mailto:yunhong.jiang@intel.com" target="_blank">yunhong.jiang@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div lang="ZH-CN" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Doug, thanks for reply.
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">It’s logging module failed to print anything other than this warning. The issue happens in followed code on _load_plugins() from stevedore/extension.py. If exception happen when loading plugin, while
 the code intended to log the exception stacktrace, but it printed only one warning of “"No handler could be found for logger "</span><span lang="EN-US">
<span style="color:#1f497d">stevedore.extension"" printed, no stack trace at all.</span></span></p></div></div></blockquote><div><br></div><div>Right. I think that's a print statement embedded in the standard library logging module, and not an exception.</div>
<div><br></div><div><a href="http://hg.python.org/cpython/file/bb21c800cf49/Lib/logging/__init__.py#l1323">http://hg.python.org/cpython/file/bb21c800cf49/Lib/logging/__init__.py#l1323</a></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="ZH-CN" link="blue" vlink="purple"><div><p class="MsoNormal"><span lang="EN-US"><span style="color:#1f497d"><u></u><u></u></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">   def _load_plugins(self, invoke_on_load, invoke_args, invoke_kwds):<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">        extensions = []<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">        for ep in pkg_resources.iter_entry_points(self.namespace):<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">            LOG.debug('found extension %r', ep)<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">            try:<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                ext = self._load_one_plugin(ep,<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                                            invoke_on_load,<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                                            invoke_args,<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                                            invoke_kwds,<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                                            )<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                if ext:<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                    extensions.append(ext)<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">            except KeyboardInterrupt:<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                raise<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">            except Exception as err:<u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                LOG.error('Could not load %r: %s', <a href="http://ep.name" target="_blank">ep.name</a>, err)   >>> not printed<u></u><u></u></span></p>

<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US" style="color:#1f497d">                LOG.exception(err)              >>> not printed<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">        return extensions<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">IMHO, I don’t think stevedore should handle the exception silently. The caller should handle that to be more flexible. Or at least it should know that some plug-in failed to load. Possibly we can
 return plugin iterator to caller, and caller load them one by one.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Possibly we can dsicuss on the stevedore side.</span></p></div></div></blockquote><div><br></div><div>Part of the point of stevedore is to make it so the caller doesn't have to worry about that sort of thing. An exception is raised if no plugins can be loaded, but otherwise individual plugins shouldn't cause errors.</div>
<div><br></div><div>Doug</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="ZH-CN" link="blue" vlink="purple"><div><p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Thanks<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">--jyh<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-left:5.25pt"><span lang="EN-US"><u></u><u></u></span></p>
</div>
</div>
<div><div class="im">
<p class="MsoNormal"><span lang="EN-US"><br>
<br>
        IMHO the _load_plugins() in stevestore.extension should not handle the exception, instead, the caller should do that.<u></u><u></u></span></p>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">Is it actually an exception, or is it just the logging module reporting a warning?<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">In either case, I opened a bug (<a href="https://github.com/dreamhost/stevedore/issues/2" target="_blank">https://github.com/dreamhost/stevedore/issues/2</a>) to address this in stevedore.<u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"> <u></u><u></u></span></p>
</div>
</div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal"><span lang="EN-US"><br>
Thanks<br>
--jyh<u></u><u></u></span></p>
</blockquote>
</div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
</div>
</div>

</blockquote></div><br>