title: 使用AWS亚马逊云搭建Gmail转发服务(三)

author:青南

date: 2015-01-02 15:42:22

categories: [Python]

tags: [log,Gmail,Python,Flask]

在上一篇文章使用AWS亚马逊云搭建Gmail转发服务(二)中,我们已经介绍了如何把邮件转发程序部署在服务器上。但是这样还不够。还需要实时监控程序的运行状态。于是,给程序增加日志记录功能是非常重要的。

日志

这里使用Python的logging库,实现日志记录功能。

import logging

logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s %(levelname)s %(message)s',
datefmt='%Y %m %d %H:%M:%S', #日期格式:年月日时分秒
filename='mail_note.log', #文件名
filemode='a') #以最佳的方式添加日志
mail_log = logging.getLogger('maillog')

以上代码的作用是导入logging库功能。然后配置logging的输出格式。

各行代码的作用已经注释。

要使用日志的时候,通过以下代码:

logging.info('日志内容')

同类的还有:

mail_log.debug('内容')
mail_log.warning('内容')
mail_log.error('内容')
……

logging库的功能还有很多,这里只是简单的介绍一下,更多的功能可以查阅相关的资料。

Flask

现在日志已经生成。又如何通过Flask查看呢?由于我的前端不行。因此这里就不使用精细的模板了。Flask的部署就不叙述了,各位可以参考Flask官方文档http://dormousehole.readthedocs.org/en/latest/

这里我只演示一个非常简单的日志输出功能。编写gmail_flask.py,请看代码:

#--coding:utf-8--

from flask import Flask

app = Flask(name)

@app.route('/')
def index():
f = open('mail_note.log','rb') #以读文件的方式打开mail_note.log文件
content = f.readlines()#按行读取日志
s = ''
for each in content:
s += each
s += '</p>'#输出日志
f.close()
return s if __name__ == '__main__':
app.run(host='0.0.0.0') #开发外网访问

这个功能是把日志按行输出到网页上。

现在测试一下功能:

在终端窗口输入:

screen
python gmail_helper.py

然后Ctrl+A+D返回,再输入:

  screen
python gmail_flask.py

然后访问服务器的5000端口查看效果。如图是我的服务器返回信息:

这里出现了Google的很多信息,这是由于Gmail的API库文件discovery.py里面也有用到日志功能。这个时候这里调用根logging,就会把discovery.py里面logging.info输出的信息写出来。这个时候怎么办呢?我对logging不是很熟悉,还请熟悉logging模块的朋友指点迷津。

我使用了一个变通的办法:

修改gmail_flask.py文件:

#-*-coding:utf-8-*-
from flask import Flask
app = Flask(__name__) @app.route('/')
def index():
f = open('mail_note.log','rb') #以读文件的方式打开mail_note.log文件
content = f.readlines()#按行读取日志
s = ''
for each in content:
if 'gmail_helper.py' in each: #判定信息来自gmail_helper.py而不是discovery.py
s += each
s += '</p>'#输出日志
f.close()
return s if __name__ == '__main__':
app.run(host='0.0.0.0') #开发外网访问

效果如下图:

源代码已更新到Github,请戳->https://github.com/kingname/MCC/blob/master/ghelper_with_log

我的日志会通过博客进行开放,地址请戳:

http://flask.kingname.info:5000

(2015年1月8日已暂停flask.kingname.info:5000访问,因为发现有个人信息流出。)

使用AWS亚马逊云搭建Gmail转发服务(三)的更多相关文章

  1. 使用AWS亚马逊云搭建Gmail转发服务(二)

    title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...

  2. 使用AWS亚马逊云搭建Gmail转发服务(一)

    title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...

  3. [转]Amazon AWS亚马逊云服务免费一年VPS主机成功申请和使用方法

    今天部落将再次为大家介绍如何成功申请到来自亚马逊的Amazon AWS免费一年的VPS主机服务.亚马逊公司这个就不用介绍了,是美国最大的一家网络电子商务公司,亚马逊弹性计算云Amazon EC2更是鼎 ...

  4. 当 EDA 遇到 Serverless,亚马逊云科技出招了

    近二三十年来,软件开发领域毫无疑问是发展最为迅速的行业之一. 在上个世纪九十年代,世界上市值最高的公司大多是资源类或者重工业类的公司,例如埃克森美孚或者通用汽车,而现在市值最高的公司中,纯粹的软件公司 ...

  5. AWS系列之一 亚马逊云服务概述

    云计算经过这几年的发展,已经不再是是一个高大上的名词,而是已经应用到寻常百姓家的技术.每天如果你和互联网打交道,那么或多或少都会和云扯上关系.gmail.github.各种网盘.GAE.heroku等 ...

  6. 亚马逊云服务器AWS安装CentOS

    亚马逊云服务器默认创建的实例,在停止之后再启动的情况下,IP会发生改变.所以我们最好先创建一个弹性IP,即EIP,不过我也不清楚这个费用. 1.按如图操作创建一个弹性IP,弹性IP创建之后可以随便绑定 ...

  7. 【AWS】亚马逊云常用服务解释

    新公司使用的是亚马逊服务,刚开始的时候,对很多名词不太明白,总结了一下如下 1,EC2 这个是亚马逊的一种服务器服务,可以理解为跟vmware差不多,EC2为虚拟机提供载体,EC2上跑虚拟机服务器. ...

  8. 使用亚马逊云服务器EC2做深度学习(三)配置TensorFlow

    这是<使用亚马逊云服务器EC2做深度学习>系列的第三篇文章. (一)申请竞价实例  (二)配置Jupyter Notebook服务器  (三)配置TensorFlow  (四)配置好的系统 ...

  9. 亚马逊云架设WordPress博客

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 这篇文章介绍如何在亚马逊云架设WordPress博客.最强的云,加上最流行的建站工 ...

随机推荐

  1. 利用SQLServer数据库发送邮件

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候.等等,,, 先 ...

  2. Python标准模块--Iterators和Generators

    1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(80)-自由桌面

    系列目录 前言 这次我们来做一个有趣的事情,有朋友跟做了很远,找我要自由桌面的代码,这次我们将演示自由桌面的代码. 自由桌面:用户可以随意增删改桌面的布局.个数(只留自己需要看到的数据),这次纯属Ea ...

  4. javascript:逆波兰式表示法计算表达式结果

    逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 -  等价于   5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...

  5. [C#] 简单的 Helper 封装 -- SQLiteHelper

    using System; using System.Data; using System.Data.SQLite; namespace SqliteConsoleApp { /// <summ ...

  6. JavaScript模仿块级作用域

    avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ( ...

  7. 使用mybatis-generator在自动生成Model类和Mapper文件

    使用mybatis-generator插件可以很轻松的实现mybatis的逆向工程,即,能通过表结构自动生成对应的java类及mapper文件,可以大大提高工作效率,并且它提供了很多自定义的设置可以应 ...

  8. php批量删除

    php批量删除可以实现多条或者全部数据一起删除 新建php文件 显示数据库中内容: <table width="100%" border="1" cell ...

  9. Solr 排除查询

    前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...

  10. 不懂CSS的后端难道就不是好程序猿?

    由于H5在移动端的发展如日中天,现在大部分公司对高级前端需求也是到处挖墙角,前端薪资也随之水涨船高,那公司没有配备专用的前端怎么办呢? 作为老板眼中的“程序猿” 前端都不会是非常无能的表现,那作为后端 ...