don't mix unicode strings with utf8-in-byte-strings
otherwise we explode with:
```
Traceback (most recent call last):
  File /usr/lib/python2.7/logging/handlers.py, line 78, in emit
    logging.FileHandler.emit(self, record)
  File /usr/lib/python2.7/logging/__init__.py, line 950, in emit
    StreamHandler.emit(self, record)
  File /usr/lib/python2.7/logging/__init__.py, line 887, in emit
    self.handleError(record)
  File /usr/lib/python2.7/logging/__init__.py, line 810, in handleError
    None, sys.stderr)
  File /usr/lib/python2.7/traceback.py, line 124, in print_exception
    _print(file, 'Traceback (most recent call last):')
  File /usr/lib/python2.7/traceback.py, line 13, in _print
    file.write(str+terminator)
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/logger/_io.py, line 170, in write
    self.log.emit(self.level, format=u{log_io}, log_io=line)
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/logger/_logger.py, line 144, in emit
    self.observer(event)
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/logger/_observer.py, line 136, in __call__
    errorLogger = self._errorLoggerForObserver(brokenObserver)
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/logger/_observer.py, line 156, in _errorLoggerForObserver
    if obs is not observer
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/logger/_observer.py, line 81, in __init__
    self.log = Logger(observer=self)
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/logger/_logger.py, line 64, in __init__
    namespace = self._namespaceFromCallingContext()
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/logger/_logger.py, line 42, in _namespaceFromCallingContext
    return currentframe(2).f_globals[__name__]
  File /home/matrix/.synapse/local/lib/python2.7/site-packages/twisted/python/compat.py, line 93, in currentframe
    for x in range(n + 1):
RuntimeError: maximum recursion depth exceeded while calling a Python object
Logged from file site.py, line 129
  File /usr/lib/python2.7/logging/__init__.py, line 859, in emit
    msg = self.format(record)
  File /usr/lib/python2.7/logging/__init__.py, line 732, in format
    return fmt.format(record)
  File /usr/lib/python2.7/logging/__init__.py, line 471, in format
    record.message = record.getMessage()
  File /usr/lib/python2.7/logging/__init__.py, line 335, in getMessage
    msg = msg % self.args
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 4: ordinal not in range(128)
Logged from file site.py, line 129
```
...where the logger apparently recurses whilst trying to log the error, hitting the
maximum recursion depth and killing everything badly.
			
			
				pull/3470/head
			
			
		
							parent
							
								
									75d4986a8c
								
							
						
					
					
						commit
						f131bf8d3e
					
				|  | @ -113,7 +113,9 @@ class SynapseRequest(Request): | |||
|             " %sB %s \"%s %s %s\" \"%s\" [%d dbevts]", | ||||
|             self.getClientIP(), | ||||
|             self.site.site_tag, | ||||
|             self.authenticated_entity, | ||||
|             # need to decode as it could be raw utf-8 bytes | ||||
|             # from a IDN servname in an auth header | ||||
|             self.authenticated_entity.decode("utf-8"), | ||||
|             end_time - self.start_time, | ||||
|             ru_utime, | ||||
|             ru_stime, | ||||
|  | @ -125,7 +127,12 @@ class SynapseRequest(Request): | |||
|             self.method, | ||||
|             self.get_redacted_uri(), | ||||
|             self.clientproto, | ||||
|             self.get_user_agent(), | ||||
|             # need to decode as could be raw utf-8 bytes | ||||
|             # from a utf-8 user-agent. | ||||
|             # N.B. if you don't do this, the logger explodes | ||||
|             # with maximum recursion trying to log errors about | ||||
|             # the charset problem. | ||||
|             self.get_user_agent().decode("utf-8"), | ||||
|             evt_db_fetch_count, | ||||
|         ) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Matthew Hodgson
						Matthew Hodgson