加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl的logwrapper

发布时间:2020-12-16 00:16:24 所属栏目:大数据 来源:网络整理
导读:对任何的函数将标准输出和错误输出重定向到对应的log文件。 对任何的函数记录函数运行的时间。 ? 代码: # !/usr/bin/perl use ?warnings; use ?strict; no ?strict? " refs " ; sub ?testLogToStd{ print ? " Test?stdout?:?n " ; open ? LOG , " ?2.txt "


对任何的函数将标准输出和错误输出重定向到对应的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?testn ";
# recover?STDOUT
select?STDOUT;
print? " just?a?test2n ";
close? LOG;
}

sub?testFun{
?? print? " From?testFunn ";
?? print?STDERR? " From?TestFun?Errorn ";
}
sub?testFun2{
?? my? $arg1?=? shift;
?? my? $arg2?=? shift;
?? print? " From?testFun2n ";
?? print? $arg1. " n ";
?? print? $arg2. " n ";
}

my? $log_root?=? " log "? if(!?$ 3?||$ 3?==? "");
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.logn ";

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? " $funn ";
?? print? $REPORTLOG? " start: ". localtime( $start). " n ";
?? print? $REPORTLOG? " end: ". localtime( $end). " n ";
?? print? $REPORTLOG? " duration: ".formatTimeDuration( $duration). " n ";
?? print? $REPORTLOG? " result:$retn ";
?? print? $REPORTLOG? " n ";
?? print? $REPORTLOG? " n ";
}

sub?formatTimeDuration($){
?? my? $t?=? shift;
?? my? $hrs?=? int( $t/ 3600);
?? my? $mins?=? int( $t% 3600/ 60);
?? my? $secs?=? int( $t% 3600% 60);
?? return? " $hrs:$mins:$secs ";
}


&logWrapper( $log_root,$REPORTLOG," testFun ");
&logWrapper( $log_root," testFun2 "," arg1 "," arg2 ");

print?"thanksn";?

?

如果需要调用外部命令需要如下:

?

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;??


?完!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读