Re: [openstack-dev] [Heat][devstack] Logging Unicode characters

2014-12-25 Thread Qiming Teng
After some tweaking to screen sessions, finally I can see Unicode
strings logged and shown in screen environment.  It is not a problem of
oslo.log or log module from oslo-incubator.  Sorry for the false alarm.

Maybe devstack should start screen sessions with Unicode support by
default?

Regards,
  - Qiming

On Wed, Dec 24, 2014 at 08:58:13PM +0800, Qiming Teng wrote:
 Seems that the reason is in devstack 'screen' is not started with
 Unicode support.  Still checking ...
 
 Regards,
   Qiming
 
 On Wed, Dec 24, 2014 at 05:48:56PM +0800, Qiming Teng wrote:
  Hi,
  
  When trying to enable stack names in Heat to use unicode strings, I am
  stuck by a weird behavior of logging.
  
  Suppose I have a stack name assigned some non-ASCII string, then when
  stack tries to log something here:
  
  heat/engine/stack.py:
  
   536 LOG.info(_LI('Stack %(action)s %(status)s (%(name)s): '
   537  '%(reason)s'),
   538  {'action': action,
   539   'status': status,
   540   'name': self.name,   # type(self.name)==unicode here
   541   'reason': reason})
  
  I'm seeing the following errors from h-eng session:
  
  Traceback (most recent call last):
File /usr/lib64/python2.6/logging/__init__.py, line 799, in emit
  stream.write(fs % msg.decode('utf-8'))
File /usr/lib64/python2.6/encodings/utf_8.py, line 16, in decode
  return codecs.utf_8_decode(input, errors, True)
  UnicodeEncodeError: 'ascii' codec can't encode characters in position 
  114-115: 
   ordinal not in range(128)
  
  This means logging cannot handle Unicode correctly?  No.  I did the
  following experiments:
  
  $ cat logtest
  
  #!/usr/bin/env python
  
  import sys
  
  from oslo.utils import encodeutils
  from oslo import i18n
  
  from heat.common.i18n import _LI
  from heat.openstack.common import log as logging
  
  i18n.enable_lazy()
  
  LOG = logging.getLogger('logtest')
  logging.setup('heat')
  
  print('sys.stdin.encoding: %s' % sys.stdin.encoding)
  print('sys.getdefaultencoding: %s' % sys.getdefaultencoding())
  
  s = sys.argv[1]
  print('s is: %s' % type(s))
  
  stack_name = encodeutils.safe_decode(unis)
  print('stack_name is: %s' % type(stack_name))
  
  # stack_name is unicode here
  LOG.error(_LI('stack name: %(name)s') % {'name': stack_name})
  
  $ ./logtest some Chinese here
  
  [tengqm@node1 heat]$ ./logtest 中文
  sys.stdin.encoding: UTF-8
  sys.getdefaultencoding: ascii
  s is: type 'str'
  stack_name is: type 'unicode'
  2014-12-24 17:51:13.799 29194 ERROR logtest [-] stack name: 中文
  
  It worked.  
  
  After spending more than one day on this, I'm seeking help from people
  here.  What's wrong with Unicode stack names here?
  
  Any hints are appreciated.
  
  Regards,
- Qiming
  
  
  ___
  OpenStack-dev mailing list
  OpenStack-dev@lists.openstack.org
  http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
 
 
 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [Heat][devstack] Logging Unicode characters

2014-12-25 Thread Jeremy Stanley
On 2014-12-25 21:57:30 +0800 (+0800), Qiming Teng wrote:
[...]
 Maybe devstack should start screen sessions with Unicode support by
 default?

The easiest way to have that discussion is to add -U to the screen
calls in the screen_rc function definition in openstack-dev/devstack
functions-common and see what the CI jobs and DevStack reviewers
have to say about that change when you submit it to Gerrit.

Or else consider filing a bug at
https://bugs.launchpad.net/devstack/+filebug and hope some other
contributor has time to follow through with it.
-- 
Jeremy Stanley

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev