Use bytes instead of unicode with isinstance.
[portage.git] / pym / portage / elog / mod_syslog.py
index 28aa15b3ce34c8870aec8b23c8d5d06d9af191c8..64558410d6eef00f2274f638195e9dafcac7308a 100644 (file)
@@ -1,22 +1,31 @@
 # elog/mod_syslog.py - elog dispatch module
-# Copyright 2006-2007 Gentoo Foundation
+# Copyright 2006-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Id$
 
+import sys
 import syslog
 from portage.const import EBUILD_PHASES
+from portage import _encodings
 
-def process(mysettings, cpv, logentries, fulltext):
+_pri = {
+       "INFO"   : syslog.LOG_INFO, 
+       "WARN"   : syslog.LOG_WARNING, 
+       "ERROR"  : syslog.LOG_ERR, 
+       "LOG"    : syslog.LOG_NOTICE,
+       "QA"     : syslog.LOG_WARNING
+}
+
+def process(mysettings, key, logentries, fulltext):
        syslog.openlog("portage", syslog.LOG_ERR | syslog.LOG_WARNING | syslog.LOG_INFO | syslog.LOG_NOTICE, syslog.LOG_LOCAL5)
        for phase in EBUILD_PHASES:
                if not phase in logentries:
                        continue
                for msgtype,msgcontent in logentries[phase]:
-                       pri = {"INFO": syslog.LOG_INFO, 
-                               "WARN": syslog.LOG_WARNING, 
-                               "ERROR": syslog.LOG_ERR, 
-                               "LOG": syslog.LOG_NOTICE,
-                               "QA": syslog.LOG_WARNING}
-                       msgtext = "".join(msgcontent)
-                       syslog.syslog(pri[msgtype], "%s: %s: %s" % (cpv, phase, msgtext))
+                       for line in msgcontent:
+                               line = "%s: %s: %s" % (key, phase, line)
+                               if sys.hexversion < 0x3000000 and not isinstance(line, bytes):
+                                       # Avoid TypeError from syslog.syslog()
+                                       line = line.encode(_encodings['content'], 
+                                               'backslashreplace')
+                               syslog.syslog(_pri[msgtype], line.rstrip("\n"))
        syslog.closelog()