前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个添加日志处理模块的python实例

一个添加日志处理模块的python实例

作者头像
冰霜
发布2022-03-15 19:29:21
2910
发布2022-03-15 19:29:21
举报
文章被收录于专栏:冰霜的软件测试技术分享

日志模块在一个完整项目中必不可少,平时在工作中遇到系统报错等,也是首先到服务器查看报错日志(ps.即使看不懂,也会把报错部分copy出来当做bug附件)

下面通过一个调用天气接口API查询天气的例子,来说一下如何在python中添加日志模块

1 准备工作

因为这次是调用一个查询天气接口,所以需要先找个提供免费查询的网站

随便点进去一个可以发现很多网站都提供个人免费查询,任意选一个即可

我选择了『天气查询API网站』:

https://www.tianqiapi.com/index

要先注册一个账号,然后查阅下『免费实况天气API文档』,学会如何使用,这里不展开讲了(这个挺简单,根据api文档调用下接口就成)

2 项目代码结构

一个简单的目录结构如下

utils目录中的 logger.py 是添加日志模块的代码

代码语言:javascript
复制
# coding: utf-8
# author: hmk

import logging
import os
from everyday_wether.utils import get_path


log_path = os.path.dirname(get_path.get_cwd())
print(log_path)


#创建一个logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

#创建一个handler,用于写入日志文件
log_path = os.path.dirname(get_path.get_cwd())+"/logs/" # 指定文件输出路径,注意logs是个文件夹,一定要加上/,不然会导致输出路径错误,把logs变成文件名的一部分了
logname = log_path + 'out.log' #指定输出的日志文件名
fh = logging.FileHandler(logname,encoding = 'utf-8')  # 指定utf-8格式编码,避免输出的日志文本乱码
fh.setLevel(logging.DEBUG)  # 设置日志器将会处理的日志消息的最低严重级别,设置为DEBUG

#创建一个handler,用于将日志输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)


if __name__ == '__main__':
    logger.debug("User %s is loging" % 'admin')

然后在 query_weather.py 中调用日志模块

代码语言:javascript
复制
# coding: utf-8
# author: hmk

import requests
import json
import yaml
from everyday_wether.utils.get_path import get_path
from everyday_wether.utils.logger import logger

class QueryWeather:
    def __init__(self):

        with open(get_path()+"/data/weather_api.yaml", "r", encoding="utf-8") as self.weather_api_file:
            """读取天气接口配置文件"""
            self.weather_api = yaml.load(self.weather_api_file, Loader=yaml.FullLoader)  # self.config_data表示配置文件的数据
        # print(self.weather_api)
        # print(type(self.weather_api))

        with open(get_path()+"/data/city.json", "r", encoding="utf-8") as self.city_file:
            """读取城市数据文件"""
            self.city_data = json.load(self.city_file)
        # print(self.city_data)
        # print(type(self.city_data))

        # 调用实况天气的请求信息
        self.live_dates_weather_url = self.weather_api["live_dates_weather"]["url"]
        self.live_dates_weather_payload = self.weather_api["live_dates_weather"]["payload"]


    def live_dates_weather(self, city_id=None, city=None):
        """查询实况天气(1天)"""

        payload = self.live_dates_weather_payload
        payload["cityid"] = city_id
        payload["city"] = city

        response = requests.get(self.live_dates_weather_url, params=payload)

        if response.status_code == 200:
            data = response.json()
            try:
                print(data)
                logger.debug(data)  # 调用日志模块
            except Exception as e:
                print("请求失败,错误信息为 %d", e)

    def main(self):
        self.live_dates_weather(city="北京")



if __name__ == '__main__':
    t = QueryWeather()
    t.main()

logs目录下的out.log是日志输出文件

运行一下,会看到里面写入了日志

传送门

GitHub:

https://github.com/Archerhhh/everyday_weather

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冰霜blog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 准备工作
  • 2 项目代码结构
  • 传送门
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档