Issue with logging.config

Joe Hughes jwhughes at hughesconcepts.com
Thu Jul 8 11:00:49 EDT 2010


Hi Python Help:

	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.

Thanks,
Joe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100708/7ea76928/attachment.html>


More information about the Python-list mailing list