面对中转机磁盘容量限制,有时为了能多保存一段时间的日志,不得不对旧日志进行压缩备份,并清理掉就日志,为此写了一段小程序分享下

场景:

某游戏一天产生的数据量

执行结果如下:

......

查看效果

........
这样执行是备份清理游戏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);
}












												

perl对日志进行压缩备份小程序相关推荐

  1. 小程序上传服务器图片压缩,微信小程序压缩图片并上传到服务器(拿去即用)...

    /**压缩图片*/compressionImage(tempFilePaths, params) { let that= thiswx.getImageInfo({ src: tempFilePath ...

  2. 微信小程序中进行图片压缩

    微信小程序中进行图片压缩 问题: 一般情况下,小程序在进行拍照识别的时候,上传图片的大小会使小程序出现冗余,这个时候,为了减少小程序的冗余 并且使上传的图片可以分辨出该图片中的内容是那些内容,我们就需 ...

  3. 定位技术课程设计-微信小程序校园导游系统

    定位技术课程设计课程设计教学目的课程设计要求课程设计题目原题目拓展内容需求分析原理分析微信小程序API定位原理WIFI指纹定位原理路径规划算法调研详细设计总述主页面介绍学校简介页面介绍导引页面概述导引 ...

  4. 微信小程序周报(第六期)

    2019独角兽企业重金招聘Python工程师标准>>> 微信小程序周报(第六期) 客户被绑,蒙眼,惊问:"想干什么?" 对方不语,鞭笞之,客户求饶:"别 ...

  5. 微信小程序资料集(下)

    **8月18日小程序Demo集合** [微信小程序Demo:股票分时图.K线图](简书) [微信小程序精品Demo:知乎日报](简书) [微信小程序Demo:事项助手(在日历上添加事件备注)](简书) ...

  6. 小程序开发教程、小程序资讯、小程序demo、小程序实战等合揖(7月19日更新)

    7月19日微信小程序联盟更新的小程序开发教程.小程序资讯.小程序demo.小程序实战内容合揖如下: 小程序资讯与小程序教程 一张图带你看懂小程序发展蓝皮书 2017-07-19 微信小程序开发问答&l ...

  7. 小程序开发教程、小程序资讯、小程序demo、小程序实战等合揖(7月19日更新)...

    2019独角兽企业重金招聘Python工程师标准>>> 7月19日微信小程序联盟更新的小程序开发教程.小程序资讯.小程序demo.小程序实战内容合揖如下: #小程序资讯与小程序教程 ...

  8. 这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 今年3月份,在阿里云北京峰会上,阿里巴巴正式发布了"阿里巴巴小程序繁星计划&quo ...

  9. 前端的date类型后台接收_腾讯高级前端工程师支招,云开发实现小程序打赏和提现云开发实践...

    导语 微信打赏支付和红包提现,是日常高频功能,那么基于小程序云开发,如何实现小程序的打赏支付和红包提现呢?腾讯工程师给你支招. 如何实现小程序打赏支付 1.1 小程序打赏支付功能介绍 这次的打赏功能, ...

最新文章

  1. mxnet与pytorch比较 bn层
  2. python表白程序-如何用Python代码向心爱的姑娘花式表白?
  3. mysql io depth_MySQL读写IO的操作过程解析
  4. java的read()_Java Reader read()方法
  5. linux系统命令make、clean、distclean的用法讲解
  6. UVA1585 UVALive3354 Score【水题】
  7. 矩阵分解的推荐算法入门-好好看
  8. 跨平台数据库ODB实战1-ODB安装
  9. GIS 矢量数据 编码方式
  10. JSON: JavaScript Object Notation(JavaScript 对象表示法)
  11. 4位共阴极数码管的动态扫描电路VHDL设计
  12. 全网最全获取设计灵感创意的网站
  13. IE浏览器一打开就提示“已停止工作”的解决方案
  14. 第3课 把文件存入Git文档库
  15. python斗地主出牌算法_斗地主之用蚁群算法整理牌型:如何进行牌力估计
  16. windows 10 清理系统盘
  17. 前端高频面试题汇总(css,html)
  18. 关联分析中的支持度、可信度和提升度
  19. c语言联想输入法算法,华为:编程实现联想输入法 输入联想功能是非常实用的一个功能,请编程实现类似功能...
  20. 2020中考可不可以用计算机,2020中考必读 | 中考电脑阅卷流程“潜规则”!读完孩子少丢20分!(转给中考生)...

热门文章

  1. 【汉字转拼音工具】Java 汉字转拼音
  2. WINFORM时间控件(DATATIMEPICKER)的显示格式设置
  3. css border实现图形
  4. XSS challenges闯关笔记
  5. 基于Linux平台上的外文文献阅读软件—需求分析
  6. 御坂坂的c++学习之路(4)
  7. 计算机教师培训感悟反思,教学工作反思感悟
  8. ipv6的127位掩码如何表示_计算机子网掩码知识举例详解
  9. Modern Family Season 1#01
  10. 豪能转债上市价格预测