Django實戰-分析日誌

  • 2019 年 10 月 5 日
  • 筆記

Django網路應用開發的5項基礎核心技術包括模型(Model)的設計,URL 的設計與配置,View(視圖)的編寫,Template(模板)的設計和Form(表單)的使用。

在前一小節中,使用 log 記錄訪問日誌,將用戶請求的資訊通過中間件存入 django 配置的 log 文件中。

一、分析日誌任務

① 通過讀取上一小節中日誌統計的 log 內容,將分析請求次數、最大值、最小值、平均值

# 讀取統計的 log 內容  data_file = os.path.join(settings.BASE_DIR, "log", "statistics.log")  if not os.path.exists(data_file):      logger.warning("file not exists. file=[%s]" % data_file)      return

② 打開統計的 log 文件

result = {}  with open(data_file, "r") as data_file:      for line in data_file:          # 去掉前後換行符          line = line.strip()          # 用空格作為分割          content = line.split(" ")[2]          content_list = content.split(settings.STATISTICS_SPLIT_FLAG)          # 取出時間,用等號作為分割,取後面一項,前面和後面的中括弧去掉          log_time = int(content_list[0].split("=")[1][1:-1])          path = content_list[1].split("=")[1][1:-1]          full_path = content_list[2].split("=")[1][1:-1]          cost = float(content_list[3].split("=")[1][1:-1])            # 記錄數據          # path: value_list          if path not in result.keys():              result[path] = []          result[path].append(cost)

③ 最大值、最小值、平均值

# 最大值、最小值、平均值  report_content = []  for k, v_list in result.items():      # 請求次數,時間的次數      count = len(v_list)      # 最大值      v_max = max(v_list)      # 最小值      v_min = min(v_list)      # 平均值      v_avg = sum(v_list) * 1.00 / count      # k 請求地址,從右邊40      content = "%-40s COUNT: %d  MAX_TIME: %.4f(s) MIN_TIME: %.4f(s) AVG_TIME: %.4f(s)" % (k, count, v_max, v_min, v_avg)      report_content.append(content)

Tags: