python 程序停止打印日志_python备份+打印日志程序

该博客介绍了一个Python程序,用于自动备份指定目录及其子目录的文件,并通过TimedRotatingFileHandler实现日志记录,日志保留7天。程序利用递归遍历文件,比较文件修改时间决定是否需要备份,并提供了在Windows任务计划程序和Linux crontab中自动启动的方法。
摘要由CSDN通过智能技术生成

需求

1.可以对目录以及目录下的子文件进行备份,并针对修改时间进行备份,若本文件的修改时间与本来就存在的修改时间相同,则不备份(精确到秒即可)

2.需要记录日志,尤其对重复文件的复制,其他程序可根据日志的格式进行解析并监控(后续再写监控程序,备份发生意外短信通知【短信通知需要有API提供接口才行】)

3.程序自动启动

分析【设计】

WBS

1.1. 日志打印需要保存,考虑到应用本身的应用,本程序输出的日志仅保留7天

1.2. 文件需要遍历至子文件与子文件夹 需要用到递归算法

1.3. 获取文件修改时间进行对比

1.4. 编写windows【任务计划程序】或Linux的【crontab】程序(自动化需求)程序自动启动时需要让自动登录的用户拥有启动程序的权限,windows的程序是根据谁设置的程序来处理,linux只要将脚本设置777权限就可以了(其实只要运行权限就行。。。r权限,懒人解决办法777)

自动化方式

Windows【任务计划程序】:点击跳转

Linux【crontab】:点击跳转

代码

import os

import shutil

import time

import logging

from logging.handlers import TimedRotatingFileHandler

# 要备份的路径

A = "C:\\Users\\ligen\\Documents\\StarCraft II\\\Accounts\\"

# 备份到哪里的路径

B = "I:\\SCⅡbackup\\StarCraft II\\\Accounts"

'''

上面这段配置可以通过程序读取key-value 键值对用于多功能备份

'''

log = logging.getLogger()

log.setLevel(logging.DEBUG)

'''

日志初始化

'''

logFilePath = 'E:\\LOGS\\BackSCIIFileLOGS\\BackSCIIFileLog.log'

'''

log 日志路径,养成打印日志的习惯是对程序开发有很多好处

'''

# 日志模块

log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'

formatter = logging.Formatter(log_fmt)

'''

日志打印格式

'''

log_file_handler = TimedRotatingFileHandler(filename=logFilePath, when="D", interval=1, backupCount=7)

log_file_handler.setFormatter(formatter)

log_file_handler.setLevel(logging.DEBUG)

'''

日志打印方式 日切,最多保留7天

'''

log.addHandler(log_file_handler)

# 校验规则 判断B内的文件与A 不同

def backupcheck(file_path):

"""

校验规则 获取文件修改时间 两个文件的修改时间一致则继续,注意本方法返回的是时间而不是是否

:param file_path: 文件路径

:return: 文件修改时间 yyyy-mm-dd HH-MM-SS 格式

"""

full_path = os.path.join(file_path)

mtime = os.stat(full_path).st_mtime

file_modify_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(mtime))

log.debug("检查重复文件:" + full_path + "--" + file_modify_time)

return file_modify_time

def main(path, out):

"""

:param path: 要被复制的路径

:param out: 要被输出到的路径

:return: 没有返回值

"""

log.debug("处理文件/目录 [ Process directories and files ]:[ " + path + " ]--[ " + out + " ]")

for files in os.listdir(path):

'''路径下的文件'''

name = os.path.join(path, files)

back_name = os.path.join(out, files)

if os.path.isfile(name):

if os.path.isfile(back_name):

if backupcheck(name) != backupcheck(back_name):

log.debug("复制重复文件 [ Copy duplicate file ]:[ " + name + " ]--[ " + back_name + " ]")

shutil.copy(name, back_name)

else:

log.debug("复制新文件 [ Copy new file ]:[ " + name + " ]--[ " + back_name + " ]")

shutil.copy(name, back_name)

else:

if not os.path.isdir(back_name):

os.makedirs(back_name)

'''

递归算法

'''

main(name, back_name)

if __name__ == '__main__':

log.debug("-------------------------- 开始处理备份任务 -- [ start ] --------------------------")

m = os.path.isfile(A)

n = os.path.isfile(B)

if m == 1:

log.error("A:[ " + A + " ]不是目录")

exit(1)

if n == 1:

log.error("B:[ " + B + " ]不是目录")

log.error("-------------------------- 结束处理备份任务 -- [ end ] --------------------------")

exit(1)

main(A, B)

log.debug("-------------------------- 结束处理备份任务 -- [ end ] --------------------------")

质量检查

打印日志的语句是修改过的,也仅仅是输出变了,大家请不要介意

2019-12-30 21:09:52,431 File "BackSCIIFile.py",line 76 DEBUG: ----------------------------------------开始处理备份任务----------------------------------------

2019-12-30 21:09:52,431 File "BackSCIIFile.py",line 57 DEBUG: 处理文件/目录:C:\Users\ligen\Documents\StarCraft II\Accounts\1.txt--I:\SCⅡbackup\StarCraft II\Accounts

2019-12-30 21:19:23,972 File "BackSCIIFile.py",line 76 DEBUG: ----------------------------------------开始处理备份任务----------------------------------------

2019-12-30 21:19:23,972 File "BackSCIIFile.py",line 80 ERROR: A:[C:\Users\ligen\Documents\StarCraft II\Accounts\1.txt]不是目录

2019-12-30 21:19:23,972 File "BackSCIIFile.py",line 80 DEBUG: ----------------------------------------结束处理备份任务----------------------------------------

2019-12-30 21:26:04,625 File "BackSCIIFile.py",line 80 DEBUG: ----------------------------------------开始处理备份任务----------------------------------------

2019-12-30 21:26:04,625 File "BackSCIIFile.py",line 57 DEBUG: 处理文件/目录:C:\Users\ligen\Documents\StarCraft II\Accounts--I:\SCⅡbackup\StarCraft II\Accounts

2019-12-30 21:26:04,626 File "BackSCIIFile.py",line 68 DEBUG: 复制新文件:C:\Users\ligen\Documents\StarCraft II\Accounts\1.txt--I:\SCⅡbackup\StarCraft II\Accounts\1.txt

...........

2019-12-30 21:26:04,937 File "BackSCIIFile.py",line 65 DEBUG: 复制重复文件:C:\Users\ligen\Documents\StarCraft II\Accounts\197639373\Variables.txt--I:\SCⅡbackup\StarCraft II\Accounts\197639373\Variables.txt

2019-12-30 21:26:04,939 File "BackSCIIFile.py",line 90 DEBUG: ----------------------------------------结束处理备份任务----------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值