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;?? ?完! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |