diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2006-07-20 23:20:12 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2006-07-20 23:20:12 (GMT) |
commit | dc57936b63043ad4f1bbb85e91399b02b7b22f21 (patch) | |
tree | 8443b967d96a7b7c376e3a6fe7614b05d3e82d21 /Lib/logging | |
parent | 43476e009b2f3b9fd6c3d600bb41a0298907bad5 (diff) | |
download | cpython-dc57936b63043ad4f1bbb85e91399b02b7b22f21.zip cpython-dc57936b63043ad4f1bbb85e91399b02b7b22f21.tar.gz cpython-dc57936b63043ad4f1bbb85e91399b02b7b22f21.tar.bz2 |
Addressed SF#1524081 by using a dictionary to map level names to syslog priority names, rather than a string.lower().
Diffstat (limited to 'Lib/logging')
-rw-r--r-- | Lib/logging/handlers.py | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index 70bd5d4..3552950 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -562,6 +562,18 @@ class SysLogHandler(logging.Handler): "local7": LOG_LOCAL7, } + #The map below appears to be trivially lowercasing the key. However, + #there's more to it than meets the eye - in some locales, lowercasing + #gives unexpected results. See SF #1524081: in the Turkish locale, + #"INFO".lower() != "info" + priority_map = { + "DEBUG" : "debug", + "INFO" : "info", + "WARNING" : "warning", + "ERROR" : "error", + "CRITICAL" : "critical" + } + def __init__(self, address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER): """ Initialize a handler. @@ -598,7 +610,7 @@ class SysLogHandler(logging.Handler): # necessary. log_format_string = '<%d>%s\000' - def encodePriority (self, facility, priority): + def encodePriority(self, facility, priority): """ Encode the facility and priority. You can pass in strings or integers - if strings are passed, the facility_names and @@ -619,6 +631,16 @@ class SysLogHandler(logging.Handler): self.socket.close() logging.Handler.close(self) + def mapPriority(self, levelName): + """ + Map a logging level name to a key in the priority_names map. + This is useful in two scenarios: when custom levels are being + used, and in the case where you can't do a straightforward + mapping by lowercasing the logging level name because of locale- + specific issues (see SF #1524081). + """ + return self.priority_map.get(levelName, "warning") + def emit(self, record): """ Emit a record. @@ -633,8 +655,8 @@ class SysLogHandler(logging.Handler): """ msg = self.log_format_string % ( self.encodePriority(self.facility, - string.lower(record.levelname)), - msg) + self.mapPriority(record.levelname)), + msg) try: if self.unixsocket: try: |