perl对日志进行压缩备份小程序
来源:互联网 发布:视频添加二维码软件 编辑:程序博客网 时间:2024/05/24 07:30
面对中转机磁盘容量限制,有时为了能多保存一段时间的日志,不得不对旧日志进行压缩备份,并清理掉就日志,为此写了一段小程序分享下
场景:
某游戏一天产生的数据量
执行结果如下:
......
查看效果
........
这样执行是备份清理游戏game_name的23天前的日志
也可查看日志文件看执行情况
可以看出日志目录删除了,取而代之的是压缩后的备份文件,而且占用很少的存储,当再次使用时可以调用解压脚本解压,再进行分析。
程序源代码如下:
#!/usr/bin/perl -w############################################################################# Copyright@2014 Beijing xxxxx xxxxx xxxxxx Technology Co., Ltd.## --- 原始日志压缩备份清理 ---## [usage]# wmgame_data_pack.pl -g [游戏名] -d [日志日期] -l [备份天数]## [返回值]# 0: 正常退出# 0以外: 异常退出## [功能]# 原始日志压缩备份,旧日志清理处理。## [模块构成]# wmgame_data_pack.pl 本脚本## [输入输出文件]## /xxxxxx/xxxxxxxx/[游戏名]/*/[日期] (I) 日志数据文件# /xxxxxx/xxxxxxxx/[游戏名]/*/[游戏名].[ip].[日志日期].bz2 (O) 压缩后日志文件# [注意事項]# 无## [更新历史]# -------------------------------------------------------------------------# Ver.1.00 2014/04/15 ly 作成# -------------------------------------------------------------------------############################################################################use strict;use Getopt::Long;use Switch;my $logdate;my $game;my $limitday;my ${lenv_script_name} = $0;${lenv_script_name} =~ s/\..*//;${lenv_script_name} =~ s/.*\///;my ${lenv_log_trace} = "/tmp/${lenv_script_name}.log";if(@ARGV == 0){ &ShowHelp();}my $lenv_args_result = GetOptions ( "game=s" => \$game, "date=s" => \$logdate, "limit=s" => \$limitday,);sub ShowHelp(){ print "\nUsage:\n\t $0 -g {gamename1|gamename2} -d [date] -l [days]\n\n"; print "\n\t $0 -g {gamename1|gamename2}\n\n"; exit 1;}if(not defined $game){ &wmfunc_file_write_log("ERR","请指定游戏名称!\n"); exit 1;}if(not defined $limitday){ $limitday=30;}chomp($logdate = qx/date -d "$limitday days ago" +\%F/);my @dirs=glob("/home/web/test/$game/*/$logdate");if(@dirs == 0){ chomp(my $tmptime = qx#date +\%F' '\%T#); &wmfunc_file_write_log("INF","$logdate号数据已经被清理 !"); exit 0;}foreach my $line (@dirs){ chomp($line); chomp(my $tmptime = qx#date +\%F' '\%T#); my ($ip,$tmpdate,$filename); if($line =~ /(\d+\.\d+\.\d+\.\d+)\/(\d+)-(\d+)-(\d+)/) { ($ip,$tmpdate) = ($1,$2 . $3 . $4); } $filename = "/home/web/test/$game/$ip/$game.$ip.$tmpdate.bz2"; if(not -f $filename){ &wmfunc_file_write_log("INF","原始文件压缩备份处理"); &wmfunc_file_write_log("DBG","EXEC CMD : [ tar -jcvpf $filename $line ]"); qx#tar -jcvpf $filename $line 2>/dev/null#; if("$?" ne "0") { &wmfunc_file_write_log("INF","原始文件压缩备份处理 : 失败!"); exit 1; } &wmfunc_file_write_log("INF","原始文件压缩备份处理 : 成功!"); chomp($tmptime = qx#date +\%F' '\%T#); &wmfunc_file_write_log("INF","原始日志删除处理"); &wmfunc_file_write_log("DBG","EXEC CMD : [ rm -rf $line ]"); qx#rm -rf $line#; if("$?" ne "0") { &wmfunc_file_write_log("INF","原始日志删除处理 : 失败!"); exit 1; } &wmfunc_file_write_log("INF","原始日志删除处理 : 成功!"); }else{ &wmfunc_file_write_log("INF","档案$filename已经被压缩 !"); &wmfunc_file_write_log("INF","原始日志删除处理"); &wmfunc_file_write_log("DBG","EXEC CMD : [ rm -rf $line ]"); qx#rm -rf $line#; if("$?" ne "0") { &wmfunc_file_write_log("INF","原始日志删除处理 : 失败!"); exit 1; } &wmfunc_file_write_log("INF","原始日志删除处理 : 成功!"); }}#-----------------------------------------------------------------------------# 函数名 : wmfunc_file_write_log# 概要 : 日志记录和输出# 参数 : $1 - 日志类型(INF/WRN/ERR)# : $2 - 日志信息# : $3 - 追加参数# : $4 - 日志格式标志位# 必须参数 : lenv_log - 日志文件名# 返回值(return) : (0) - 正常退出# : (1) - 异常退出#-----------------------------------------------------------------------------sub wmfunc_file_write_log{ # 参数定义 my ${lenv_log_level} = shift; my ${lenv_log_msg} = shift; my ${lenv_log_msgadd} = shift; my ${lenv_log_outputformat} = shift; if(not defined ${lenv_log_msgadd}) { ${lenv_log_msgadd}=""; } # 日志格式定义 if(not defined ${lenv_log_outputformat}) { chomp(my ${lenv_log_date} = qx#date +\%F" "\%T#); ${lenv_log_outputformat} = "${lenv_log_date} <${lenv_log_level}> ${lenv_log_msg} ${lenv_log_msgadd}\n"; }else { chomp(my ${lenv_log_date} = qx#date +\%F" "\%T#); ${lenv_log_outputformat} = "${lenv_log_date} <${lenv_log_level}> ${lenv_log_msg} ${lenv_log_msgadd}\n"; } open(LOG,">>${lenv_log_trace}") or die "打开日志文件${lenv_log_trace}发生错误 !"; print LOG "${lenv_log_outputformat}"; # 日志类型判断 switch(${lenv_log_level}) { case("DBG") { # 调试输出 print "${lenv_log_outputformat}"; } case("INF") { # 标准输出 print "${lenv_log_outputformat}"; } case("WRN") { # 警告输出 print "${lenv_log_outputformat}"; } case("ERR") { # 标准错误输出 print "${lenv_log_outputformat}"; } else { # 其他异常输出 print "${lenv_log_outputformat}"; exit 1; } } close(LOG);}
0 0
- perl对日志进行压缩备份小程序
- Log4j对日志的按天进行备份
- perl两数组进行比较删除小程序
- 使用shell脚本对日志文件进行定时压缩
- 备份数据库日志压缩数据库
- C#对sql数据库进行"备份"和"恢复"程序
- 对数据中心进行备份
- 对目录进行压缩.
- 对IOT进行压缩
- 对图片进行压缩
- 对图片进行压缩
- 对图片进行压缩
- 对图片进行压缩
- python对运行程序进行日志文件记录
- 利用RMAN备份压缩技术对数据库做全备并备份控制文件和归档日志后删除已备份的归档日志
- 用python脚本对svn库进行备份,压缩,加密,ftp上传
- 文件备份-Python3对文件夹下所有文件进行压缩处理
- 在SQL Server 2000中,如何对数据库进行备份,并且压缩备份,拷贝到其他位置
- 61 Java 简单题目
- Android数据保存之SharedPreferences
- IOS下隐藏电池等statusBar
- Android : 如何得到Activities栈顶的Activity名称
- 中石油中石化十年获政府补贴超千亿 补贴名目繁多
- perl对日志进行压缩备份小程序
- mybatis助手
- JS【JS时分秒时间控件】和js 折扣控件
- 第七周作业
- CrossCompiler And Auto tools
- Birt报表汉化—eclipse
- Java关键字final、static使用总结
- BZOJ 1798 线段树 双LAZY操作
- 第7周作业1-循环大战