python logging learning01日志重复记录,日志记录混乱副本.docx
-
资源ID:3164797
资源大小:36.98KB
全文页数:3页
- 资源格式: DOCX
下载积分:6.99金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
python logging learning01日志重复记录,日志记录混乱副本.docx
python logging learning01日志重复记录,日志记录混乱 副本1. 编写python脚本实现不间断ping, 并且实现日志记录 import osimport timeimport threadingimport multiprocessingimport logging#switch=target='CCCPrinter01':'192.168.0.12','CertificatePrinter01':'192.168.0.13','formatter = logging.Formatter('%(name)s %(asctime)s %(levelname)s %(message)smutex=threading.Lockdef logmaker(info,logfile,logger): logger=logging.getLogger(logger) handler=logging.FileHandler(logfile) handler.setFormatter(formatter) logger.addHandler(handler) logger.error('ping %s failed'%info) logger.removeHandler(handler) def logmaker_mutex(info,logfile): if mutex.acquire: logger=logging.getLogger handler=logging.FileHandler(logfile) handler.setFormatter(formatter) logger.addHandler(handler) logger.error('ping %s failed'%info) mutex.release 1.1、出现问题,记录日志的时候,日志重复记录,第一遍循环时,重复记录一次;第二次循环时候,重复记录两次,依次增加下去 问题函数如下: def logmaker(info,logfile,logger): logger=logging.getLogger(logger) handler=logging.FileHandler(logfile) handler.setFormatter(formatter) logger.addHandler(handler) logger.error('ping %s failed'%info) 原因: 问题函数中没有调用logger.removeHandler(handler) 改进后的代码如下: def logmaker(info,logfile,logger): logger=logging.getLogger(logger) handler=logging.FileHandler(logfile) handler.setFormatter(formatter) logger.addHandler(handler) logger.error('ping %s failed'%info) logger.removeHandler(handler) 问题得以解决 1.2、代码中设计有三个log文件用来记录三个打印机的网络连接日志,如果ping不通,就记录在相应的日志里面,出现的问题:记录日志时,日志混乱,相应打印机的日志没有记录到对应的log文件中,呈现随机存放到三个文件的现象。 问题代码段: 红色加粗字体部分 def logmaker(info,logfile,logger): logger=logging.getLogger handler=logging.FileHandler(logfile) handler.setFormatter(formatter) logger.addHandler(handler) logger.error('ping %s failed'%info) logger.removeHandler(handler) 原因: 在调用getLogger时要提供Logger的名称(注:多次使用相同名称来调用getLogger,返回的是同一个对象的引用。getLogger如果不提供参数,默认为root 改进后的代码如下: 添加函数参数,当记录不同打印机的日志时,指定不同的logger名称 def logmaker(info,logfile,logger): logger=logging.getLogger(logger) handler=logging.FileHandler(logfile) handler.setFormatter(formatter) logger.addHandler(handler) logger.error('ping %s failed'%info) logger.removeHandler(handler)