[Python-Dev] logging module broken because of locale
Mihai Ibanescu
misa at redhat.com
Wed Jul 19 23:29:19 CEST 2006
On Tue, Jul 18, 2006 at 02:55:56PM -0400, Fred L. Drake, Jr. wrote:
> On Tuesday 18 July 2006 14:52, Mihai Ibanescu wrote:
> > Unicode might be a perfectly acceptable suggestion for others too.
>
> Are we still supporting builds that don't include Unicode? If so, that needs
> to be considered in a patch as well.
Good point. Does the attached patch look reasonable?
Thanks,
Misa
-------------- next part --------------
--- Python-2.4.3/Lib/logging/handlers.py.nolocale 2006-07-19 12:15:46.000000000 -0400
+++ Python-2.4.3/Lib/logging/handlers.py 2006-07-19 12:16:14.000000000 -0400
@@ -44,6 +44,12 @@
DEFAULT_SOAP_LOGGING_PORT = 9023
SYSLOG_UDP_PORT = 514
+# If python was not built with unicode support, use the str function instead
+# of the unicode type, and hope locale doesn't break things.
+
+if not hasattr(__builtins__, 'unicode'):
+ unicode = str
+
class BaseRotatingHandler(logging.FileHandler):
"""
Base class for handlers that rotate log files at a certain point.
@@ -162,7 +168,7 @@
"""
def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None):
BaseRotatingHandler.__init__(self, filename, 'a', encoding)
- self.when = string.upper(when)
+ self.when = unicode(when).upper()
self.backupCount = backupCount
# Calculate the real rollover interval, which is just the number of
# seconds between rollovers. Also set the filename suffix used when
@@ -642,10 +648,12 @@
"""
We need to convert record level to lowercase, maybe this will
change in the future.
+ We convert it to unicode first, to avoid locale from changing the
+ meaning of lower() and upper()
"""
msg = self.log_format_string % (
self.encodePriority(self.facility,
- string.lower(record.levelname)),
+ unicode(record.levelname).lower()),
msg)
try:
if self.unixsocket:
@@ -854,7 +862,7 @@
("GET" or "POST")
"""
logging.Handler.__init__(self)
- method = string.upper(method)
+ method = unicode(method).upper()
if method not in ["GET", "POST"]:
raise ValueError, "method must be GET or POST"
self.host = host
More information about the Python-Dev
mailing list