perl的logwrapper
来源:
http://www.cnblogs.com/itech/archive/2012/09/22/2698385.html
对任何的函数将标准输出和错误输出重定向到对应的log文件。
对任何的函数记录函数运行的时间。
代码:
#!/usr/bin/perl
use warnings;
use strict;
no strict "refs"; sub testLogToStd{
print "Test stdout : \n";
open LOG,"> 2.txt";
select LOG;
print "just a test\n";
#recover STDOUT
select STDOUT;
print "just a test2\n";
close LOG;
} sub testFun{
print "From testFun\n";
print STDERR "From TestFun Error\n";
}
sub testFun2{
my $arg1 = shift;
my $arg2 = shift;
print "From testFun2\n";
print $arg1."\n";
print $arg2."\n";
} my $log_root = "log" if(! $ ||$ == "");
my $ret = system("mkdir $log_root") if(! -e $log_root);
my $report_log = "$log_root/report.log";
open my $REPORTLOG,">",$report_log or die "cannot not open log file report.log\n"; sub logWrapper{
my $log_root = shift;
my $REPORTLOG = shift;
my $fun = shift;
my @parameters = @_;
*old_stdout = *STDOUT;
*old_stderr = *STDERR;
open LOG, ">","$log_root/$fun.log" or die "annot open log file $fun.\n";
*STDOUT = *LOG;
*STDERR = *LOG;
my $start = time;
my $ret = &$fun(@parameters);
my $end = time;
*STDOUT = *old_stdout;
*STDERR = *old_stderr;
close LOG; my $duration = $end - $start;
print $REPORTLOG "$fun\n";
print $REPORTLOG "start:".localtime($start)."\n";
print $REPORTLOG "end:".localtime($end)."\n";
print $REPORTLOG "duration:".formatTimeDuration($duration)."\n";
print $REPORTLOG "result:$ret\n";
print $REPORTLOG "\n";
print $REPORTLOG "\n";
} sub formatTimeDuration($){
my $t = shift;
my $hrs = int($t/);
my $mins = int($t%/);
my $secs = int($t%%);
return "$hrs:$mins:$secs";
} &logWrapper($log_root,$REPORTLOG,"testFun");
&logWrapper($log_root,$REPORTLOG,"testFun2","arg1","arg2");
print "thanks\n";
如果需要调用外部命令需要如下:
use strict;
use warnings; # run external commands
# redirect stdout and stderr
sub run_cmd{
my $cmd = shift;
my $pid = open(PH, "$cmd 2>&1 |");
while (<PH>) {print $_; }
} open(FH, ">", "perl-test.log");
*old_stdout = *STDOUT;
*old_stderr = *STDERR;
*STDOUT = *FH;
*STDERR = *FH;
my $ret = undef;
$ret = readpipe("cp a b ");
$ret = system("cp a b");
$ret = `cp a b`;
run_cmd("cp a b");
print "AA";
print STDERR "BB";
*STDOUT = *old_stdout;
*STDERR = *old_stderr;
perl的logwrapper的更多相关文章
- 精通Perl(第2版)
精通Perl(第2版)(通往Perl大师之路必读经典书籍,体现了一种编程思维,能够帮你解决很多实际的问题) [美]brian d foy(布瑞恩·D·福瓦)著 王兴宇 刘宸宇 译 ISBN 978 ...
- perl
introduction: http://www.yiibai.com/perl/perl_introduction.html functions: http://www.yiibai.com/per ...
- perl学习之路3
Perl编程之路3 标签: perl 列表与数组 Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...
- perl学习之路2
这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 个人认为需要记的语法知识 "在某些情况下, 你可能需要在一台机器上写程序, 再传送到另一台机器上运行.这时候, 请使用 ...
- perl学习之路1
一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...
- perl 切换 dnspod 域名记录
提供域名,dnspod 账户密码(毕竟dns密码比较重要 不能谁 cat一下都可以看到 需要base64加密),原IP,切换目标IP, #!/bin/perl use warnings; use MI ...
- perl 删除过期文件
#!/usr/bin/perl `find /bak/ >list.txt`; open LIST,"/root/list.txt"; while (<LIST> ...
- 通过远程 http API 来控制 lnmp 环境的重启perl脚本
#!/usr/bin/perl use DBD::mysql; use strict; use warnings; use DBI; use utf8; binmode(STDOUT, ':encod ...
- 使用Python和Perl绘制北京跑步地图
当你在一个城市,穿越大街小巷,跑步跑了几千公里之后,一个显而易见的想法是,如果能把在这个城市的所有路线全部画出来,会是怎样的景象呢? 文章代码比较多,为了不吊人胃口,先看看最终效果,上到北七家,下到南 ...
随机推荐
- 【转】HTML-based script和URL-based script两种脚本录制方式
在Web(HTTP/HTML)录制中,有2种重要的录制模式.用户该选择那种录制模式呢?HTML-mode录制是缺省也是推荐的录制模式.它录制当前网页中的HTML动作.在录制会话过程中不会录制所有的资源 ...
- Dubbo集成步骤
dubbo协议实现与webservice一样的效果,用于服务调用之间的接口.dubbo可在中间实现真正意义上的中间调用管理,是一个中间管理系统. demo:http://www.devnote.cn/ ...
- Algorithm 算法
http://www.cnblogs.com/baiboy/category/723479.html 记下来,有空去看 随笔分类 - Algorithm [项目总结]自然语言处理在现实生活中运用 ...
- 如何理解CSS中的浮动 :其实他就像乘坐扶梯一样
只要你用过自动扶梯,你就能很快的理解CSS中的浮动(Float). 你肯定遇到过这样的情况: 做好了,你想用CSS浮动来调整元素间的位置关系. 在写完代码之后,你发现浮动元素没出现在你设想 ...
- MVC中AuthConfig的作用 -- ASP.NET MVC 4 使用 OAuth
ASP.NET MVC 4 使用 OAuth 这个教程向你展示了如何创建一个ASP.NET MVC 4的web应用,能让用户用外部提供方的证书(比如Facebook, Twitter, Microso ...
- C语言中字符串
#include <stdio.h> int main(){ char s[] = "ABCD"; char *p; for(p=s; p<s+4; p++) { ...
- Storm源码分析--Nimbus-data
nimbus-datastorm-core/backtype/storm/nimbus.clj (defn nimbus-data [conf inimbus] (let [forced-schedu ...
- amazeui 后台模板
<!doctype html> <html class="no-js"> <head> <meta charset="utf-8 ...
- Openjudge-计算概论(A)-第二个重复出现的数
描述: 给定一个正整数数组(元素的值都大于零),输出数组中第二个重复出现的正整数,如果没有,则输出字符串"NOT EXIST". 输入第一行为整数m,表示有m组数据.其后每组数据分 ...
- 万航单位换算器 V1.0 绿色版
软件名称: 万航单位换算器软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 347KB图片预览: 软件简介:万航单位换算器是一个可以随意转换单位的绿色软件,这个软件 ...