日志模块在一个完整项目中必不可少,平时在工作中遇到系统报错等,也是首先到服务器查看报错日志(ps.即使看不懂,也会把报错部分copy出来当做bug附件)
下面通过一个调用天气接口API查询天气的例子,来说一下如何在python中添加日志模块
因为这次是调用一个查询天气接口,所以需要先找个提供免费查询的网站
随便点进去一个可以发现很多网站都提供个人免费查询,任意选一个即可
我选择了『天气查询API网站』:
https://www.tianqiapi.com/index
要先注册一个账号,然后查阅下『免费实况天气API文档』,学会如何使用,这里不展开讲了(这个挺简单,根据api文档调用下接口就成)
一个简单的目录结构如下
utils目录中的 logger.py 是添加日志模块的代码
# 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 中调用日志模块
# 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