Xagent更新- 日志模块 实习日记

http://www.jb51.net/article/88449.htm

#-*- coding:utf-8 -*-
# 每天 00:00执行,立即升级所有在线的Agent镜像
import traceback
import requests
import json
import time
import datetime
import logging
# 配置日志信息
logging.basicConfig(level=logging.DEBUG,
          format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
          datefmt='%m-%d %H:%M',
          filename='myapp.log',
          filemode='w')
# 定义一个Handler打印INFO及以上级别的日志到sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# 设置日志打印格式
formatter = logging.Formatter('%(asctime)s %(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
#将定义好的console日志handler添加到root
logging.getLogger('').addHandler(console)
logging.info('this is a info.')
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('this is debug.')
logger1.info('this is info.')
logger2.warning('this is warning.')
logger2.error('This is error.')
def doTask():
    #查找所有在线的设备
    r = requests.get('**URL')
    if r.status_code == 200:
        try:
            res = r.json()
            device_list = res['result']
            for d in device_list:
                #下发立即升级命令
                address = d['device_ip'] + '_' + d['device_hash']
                logging.info("----------update: %s------------"%address)
                print "-------------------update %s------------------"  % address
                update_r = requests.post('**URL',
                                    data={'target':'RCM.getSystemUpgrade',
                                          'args':json.dumps([1,'','']),'address':address})
                try:
                    if update_r.status_code == 200:
                        #{u'status': 2000, u'message': {u'status': True, u'result': u'type 1 finished', u'task_id': u'b0a312b2-b144-47fc-a59d-e1905779894f'}}
                        update_dic = update_r.json()
                        if update_dic['status'] == 2000:
                            logging.info("update: %s success"%address)
                            print "update %s success" % address
                        else:
                            logging.info("update: %s error,detail is: %s"%(address,update_dic))
                            print "update %s error,detail is %s" % (address,update_dic)
                    else:
                         logging.info("update: %s error,detail is: %s"%(address,update_r.status_code))
                         print "update %s error,detail is %s" % (address,update_r.status_code)
                except Exception,e:
                    logging.info(traceback.format_exc())
                    print traceback.format_exc()
                finally:
                    update_r.close()
        except Exception,e:
            logging.info(traceback.format_exc())
            print traceback.format_exc()
    else:
        print 'request **URL' % r.status_code
    r.close()


if __name__ == '__main__':
    logging.info("==================================================================================")
    doTask()

Xagent更新- 日志模块 实习日记_第1张图片

这里写图片描述

logging 模块介绍

* logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过 logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用 getLogger方法返回同一个logger对象。
* handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0 到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。
*  filter:提供一种优雅的方式决定一个日志记录是否发送到handler。
*  formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

logging用法解析

  1. 初始化 logger = logging.getLogger(“endlesscode”),getLogger()方法后面最好加上所要日志记录的模块名字,后面的日志格式中的%(name)s 对应的是这里的模块名字
  2. 设置级别 logger.setLevel(logging.DEBUG),Logging中有NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL这几种级别,日志会记录设置级别以上的日志
  3. Handler,常用的是StreamHandler和FileHandler,windows下你可以简单理解为一个是console和文件日志,一个打印在CMD窗口上,一个记录在一个文件上
  4. formatter,定义了最终log信息的顺序,结构和内容,我喜欢用这样的格式 ‘[%(asctime)s] [%(levelname)s]
import logging
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)
# 建立一个filehandler来把日志记录在文件里,级别为debug以上
fh = logging.FileHandler("spam.log")
fh.setLevel(logging.DEBUG)
# 建立一个streamhandler来把日志打在CMD窗口上,级别为error以上
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# 设置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
ch.setFormatter(formatter)
fh.setFormatter(formatter)
#将相应的handler添加在logger对象中
logger.addHandler(ch)
logger.addHandler(fh)
# 开始打日志
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

你可能感兴趣的:(Xagent更新- 日志模块 实习日记)