Addressed SF#1524081 by using a dictionary to map level names to syslog priority names, rather than a string.lower().

This commit is contained in:
Vinay Sajip 2006-07-20 23:20:12 +00:00
parent 43476e009b
commit dc57936b63
1 changed files with 25 additions and 3 deletions

View File

@ -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: