Peter, Thanks for the information. I sent an email to the maintainer and got some information that helped me continue with this. My solution was to change line 785 of handlers.py to
self.socket.sendto(bytes(msg, 'ascii'), self.address) After I made the change, I got exactly what I was looking for. Joe On Jul 13, 2010, at 8:02 AM, Peter Otten wrote: > Joe Hughes wrote: > >> I'm doing some work with logging.config and I'm running into an >> interesting situation. I've run this by python-help, but that didn't help >> so I thought I would send to the list. Here is the config file >> >> [loggers] >> keys=root,log,syslog >> >> [handlers] >> keys=console,log,syslog >> >> [formatters] >> keys=rootFormat,logFormat,syslogFormat >> >> [logger_root] >> level=DEBUG >> handlers=console >> >> [logger_log] >> level=DEBUG >> handlers=log >> qualname=log >> >> [logger_syslog] >> level=DEBUG >> handlers=syslog >> qualname=syslog >> >> [handler_console] >> class=StreamHandler >> level=DEBUG >> formatter=rootFormat >> args=(sys.stdout,) >> >> [handler_log] >> class=handlers.RotatingFileHandler >> level=DEBUG >> formatter=logFormat >> args=('E:\local\Logs\syslog_interface.txt', 'a', 10000000, 10) >> propagate=0 >> >> [handler_syslog] >> class=handlers.SysLogHandler >> level=DEBUG >> formatter=syslogFormat >> host=141.232.41.205 >> port=handlers.SYSLOG_UDP_PORT >> facility=LOG_LOCAL0 >> > args=(('141.232.41.205',handlers.SYSLOG_UDP_PORT),handlers.SysLogHandler.LOG_LOCAL0) >> >> [formatter_rootFormat] >> format=%(asctime)s - %(name)s - %(levelname)s - %(message)s >> >> [formatter_logFormat] >> format=%(asctime)s - %(name)s - %(levelname)s - %(message)s >> >> [formatter_syslogFormat] >> format=%(asctime)s - %(name)s - %(levelname)s - %(message)s >> >> and the python code >> >> ######################################################################## >> # Imports >> ######################################################################## >> import logging >> import logging.config >> import os >> import re >> from threading import Thread >> >> ######################################################################## >> # Constants >> ######################################################################## >> CONFIG_FILENAME = 'E:\local\Config\syslog_interface.conf' >> MCU_LIST_FILENAME = 'E:\local\Scada_Devices\mcu.txt' >> >> ######################################################################## >> # Classes >> ######################################################################## >> >> ######## >> # PingIt >> ######## >> class PingIt(Thread): >> def __init__(self, mcuIP): >> Thread.__init__(self) >> self.ip = mcuIP >> self.status = -1 >> >> def run(self): >> pinging = os.popen("ping -n 2 " + self.ip, 'r') >> >> while 1: >> line = pinging.readline() >> >> if not line: >> break >> >> gotResponse = re.findall(PingIt.lifeline, line) >> >> if gotResponse: >> self.status = int(gotResponse[0]) >> >> ######################################################################## >> # Main Routine >> ######################################################################## >> # >> # Get the logger configuration information >> # >> logging.config.fileConfig(CONFIG_FILENAME) >> >> # >> # Check if running from command line and create logger >> # >> if os.environ.get('PROMPT'): >> # >> # create logger for output to stdout >> # >> logger = logging.getLogger('root') >> else: >> # >> # create logger for output to logfile >> # >> logger = logging.getLogger('log') >> >> # >> # Create logger for syslog output >> # >> syslog = logging.getLogger('syslog') >> >> # >> # Declare variables >> # >> PingIt.lifeline = re.compile(r"Received = (\d)") >> mcu_dict = {} >> ping_list = [] >> status = ("Not responding", "Responded to only 1 ping of 2", "Alive") >> >> # >> # Open the MCU file >> # >> mcu_file = open(MCU_LIST_FILENAME, 'r') >> >> # >> # Loop through the contents of the MCU file and ping the IPs >> # >> for mcu in mcu_file: >> # >> # mcu file contents example >> # 192.168.97.227 MCU_HMSTD >> # >> # mcu_info[0] = MCU IP Address >> # mcu_info[1] = MCU Name >> # >> mcu_info = mcu.split() >> mcu_dict[mcu_info[0]] = mcu_info[1] >> current = PingIt(mcu_info[0]) >> logger.info("Pinging " + mcu_info[1]) >> ping_list.append(current) >> current.start() >> >> # >> # Loop through ping list and print the response >> # >> for pinged in ping_list: >> pinged.join() >> logger.info("Status - " + mcu_dict[pinged.ip] + " is " + >> status[pinged.status]) syslog.info("Status - " + mcu_dict[pinged.ip] + >> " is " + status[pinged.status]) >> >> This is the output from the code >> >> 2010-07-06 14:43:58,280 - log - INFO - Status - netboss2 is Not responding >> msg = <134>2010-07-06 14:43:58,312 - syslog - INFO - Status - netboss2 is >> Not responding >> address = ('141.232.41.205', 514) >> Traceback (most recent call last): >> File "C:\Python31\lib\logging\handlers.py", line 786, in emit >> self.socket.sendto(msg, self.address) >> TypeError: sendto() takes exactly 3 arguments (2 given) >> 2010-07-06 14:43:58,312 - syslog - INFO - Status - netboss2 is Not >> responding >> >> This is the handlers.py code from the library. I added the print >> statement to figure out why it is asking for three args but only getting >> two. >> >> Line 777 of handlers.py >> >> try: >> if self.unixsocket: >> try: >> self.socket.send(msg) >> except socket.error: >> self._connect_unixsocket(self.address) >> self.socket.send(msg) >> else: >> print('msg = ', msg, '\naddress = ', self.address) >> self.socket.sendto(msg, self.address) >> except (KeyboardInterrupt, SystemExit): >> raise >> except: >> self.handleError(record) >> >> line 790 of handlers.py >> >> This is Python/Idle 3.1.2 on Windows 2003 Server. If anyone has an idea >> about why this happening I would appreciate knowing what the issue is. > > The error can be reproduced with > > Python 3.1.1+ (r311:74480, Nov 2 2009, 15:45:00) > [GCC 4.4.1] on linux2 > Type "help", "copyright", "credits" or "license" for more information. >>>> import logging >>>> from logging.handlers import SysLogHandler >>>> handler = SysLogHandler() >>>> logger = logging.getLogger() >>>> logger.addHandler(handler) >>>> logger.critical("yadda") > Traceback (most recent call last): > File "/usr/lib/python3.1/logging/handlers.py", line 785, in emit > self.socket.sendto(msg, self.address) > TypeError: sendto() takes exactly 3 arguments (2 given) > > This is is a known bug, see http://bugs.python.org/issue7077 > > Peter > > > -- > http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list