您的位置:首页 > 其它

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

2016-08-29 10:23 309 查看
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()






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用法解析

初始化 logger = logging.getLogger(“endlesscode”),getLogger()方法后面最好加上所要日志记录的模块名字,后面的日志格式中的%(name)s 对应的是这里的模块名字

设置级别 logger.setLevel(logging.DEBUG),Logging中有NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL这几种级别,日志会记录设置级别以上的日志

Handler,常用的是StreamHandler和FileHandler,windows下你可以简单理解为一个是console和文件日志,一个打印在CMD窗口上,一个记录在一个文件上

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")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  logging