Python 定时任务脚本:如何按天生成日志文件

在现代软件开发中,定时任务(Scheduled Tasks)是一个不可或缺的组成部分。很多时候,我们需要定期执行一些操作,比如数据备份、清理临时文件以及运行数据分析等。然而,对于这些任务的执行结果进行记录也是相当重要的,尤其是生成日志文件。本文将介绍如何使用 Python 创建一个定时任务脚本,每天生成一个日志文件。

实际问题

假设我们有一个需求,需要每天从某个网站抓取数据并将其存储到一个日志文件中。如果没有详细的日志记录,我们将很难追踪到数据抓取的历史记录。因此,我们需要编写一个 Python 脚本,能够定时执行并将抓取的结果日志到不同的文件中。

系统设计

在建立这个定时任务脚本之前,我们先来设计一下系统的架构。如下是一个简单的实体关系图,用于展示任务、日志文件和抓取数据的关系。

erDiagram
    TASK {
        string task_id
        string task_name
        date task_date
    }
    
    LOG_FILE {
        string log_id
        string log_content
        date created_at
    }
    
    DATA {
        string data_id
        string data_content
        date fetched_at
    }

    TASK ||--o{ LOG_FILE : creates
    LOG_FILE ||--o{ DATA : contains

实现步骤

我们使用 Python 的 schedule 库来实现定时任务,并用 logging 库来生成日志文件。以下是实现的步骤:

  1. 安装所需库
  2. 定义爬取数据的方法
  3. 设置定时任务
  4. 记录并生成日志文件

1. 安装所需库

首先,请确保你的 Python 环境已安装 schedulerequests 库。如果还没有,您可以使用以下命令进行安装:

pip install schedule requests

2. 定义爬取数据的方法

在这个示例中,我们将模拟从某个网站爬取数据。您可以根据实际需要替换为真实的爬取逻辑。

import requests

def fetch_data():
    response = requests.get('
    if response.status_code == 200:
        return response.json()  # 假设返回 JSON 格式的数据
    return None

3. 设置定时任务

接下来,使用 schedule 库每隔 24 小时执行一次任务。

import schedule
import time

def job():
    data = fetch_data()
    if data:
        log_data(data)

# 每24小时执行一次
schedule.every(24).hours.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)  # 休眠一秒

4. 记录并生成日志文件

通过 Python 的 logging 库,可以按天创建日志文件。以下是如何实现这个功能。

import logging
import os
from datetime import datetime

# 创建日志目录
log_dir = 'logs'
if not os.path.exists(log_dir):
    os.makedirs(log_dir)

# 配置 logging
def setup_logging():
    current_date = datetime.now().strftime('%Y-%m-%d')
    log_file = os.path.join(log_dir, f'log_{current_date}.log')
    
    logging.basicConfig(filename=log_file, level=logging.INFO,
                        format='%(asctime)s - %(levelname)s - %(message)s')

def log_data(data):
    setup_logging()  # 每次调用日志时才能生成对应日期的日志
    logging.info(f'Fetched Data: {data}')

完整代码示例

结合以上所有部分,完整的代码如下:

import requests
import schedule
import logging
import os
from datetime import datetime
import time

# 创建日志目录
log_dir = 'logs'
if not os.path.exists(log_dir):
    os.makedirs(log_dir)

def fetch_data():
    response = requests.get('
    if response.status_code == 200:
        return response.json()  # 假设返回 JSON 格式的数据
    return None

def setup_logging():
    current_date = datetime.now().strftime('%Y-%m-%d')
    log_file = os.path.join(log_dir, f'log_{current_date}.log')
    
    logging.basicConfig(filename=log_file, level=logging.INFO,
                        format='%(asctime)s - %(levelname)s - %(message)s')

def log_data(data):
    setup_logging()
    logging.info(f'Fetched Data: {data}')

def job():
    data = fetch_data()
    if data:
        log_data(data)

# 每24小时执行一次
schedule.every(24).hours.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)  # 休眠一秒

结论

通过本文的介绍,我们成功地构建了一个定时任务脚本,该脚本能在每天的固定时间抓取数据,并将结果记录到以日期命名的日志文件中。这种方法不仅便于管理和查看日志,也为后期的数据分析提供了便利。如果您有更复杂的需求,可以根据本文介绍的基本框架进行扩展和改进。这正是 Python 灵活性和强大的地方!