看了下python下的logging模块,和java的log4j差不多,把之前的代码改为使用log配置的方式实现功能(需求和之前的相同,地址"http://www.cnblogs.com/GYoungBean/p/6510508.html")
#! usr/bin/env python3 # -*- coding:utf-8 -*- import socket import threading import logging.config now_ip = "" def _get_ip_win(): ips = socket.gethostbyname_ex(socket.gethostname()) for s in ips[2]: if s.startswith('10'): return s def checkIP(start_ip): global now_ip if start_ip != now_ip: logger_mail.error('Send Mail:the old IP is:%s.Now,the new IP is:%s' % (now_ip,start_ip)) now_ip = start_ip else: logger_root.info('IP address not change,the old IP is:%s---the new IP is:%s' % (start_ip, now_ip)) new_ip = _get_ip_win() t = threading.Timer(3600.0, checkIP,(new_ip,)) t.start() if __name__ == '__main__': logging.config.fileConfig("./logging.conf") logger_mail = logging.getLogger('mail') logger_root = logging.getLogger('root') start_ip,now_ip = _get_ip_win(),_get_ip_win() checkIP(start_ip)
日志配置如下(logging.conf):
[loggers] keys=root,mail [handlers] keys=consoleHandler,fileHandler,mailHandler [formatters] keys=simpleFormatter [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s - [%(filename)s:%(lineno)s] datefmt= [logger_root] level=INFO handlers=consoleHandler,fileHandler [logger_mail] level=ERROR handlers=mailHandler,fileHandler qualname=mail propagate=0 [handler_consoleHandler] class=StreamHandler level=INFO formatter=simpleFormatter args=(sys.stdout,) [handler_fileHandler] class=FileHandler level=INFO formatter=simpleFormatter args=('./ipchange.log', 'a') [handler_mailHandler] class=handlers.SMTPHandler level=ERROR formatter=simpleFormatter args=(('xxx',25), 'xxx', ['xxx','xxx'], 'NOTICE!!!--PC IP CHANGED', ('xxx', 'xxx'))