perl的logwrapper使用实例代码_perl

这里为大家举二个小例子,供朋友们学习参考。

对任何的函数记录函数运行的时间。

复制代码 代码如下:

#!/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(! $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.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/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,$REPORTLOG,"testFun2","arg1","arg2");
print "thanks\n";

若需要调用外部命令,则需要如下:

复制代码 代码如下:

#!/usr/bin/perl
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;

时间: 2024-09-19 20:16:20

perl的logwrapper使用实例代码_perl的相关文章

Perl使用chdir的实例代码_perl

复制代码 代码如下: use strict;use warnings; # Print all files in a directorysub print_files {    my $dir = 'd:/code';    opendir DIR, $dir or die $!;    my @files = readdir DIR;    chdir $dir; # Use chdir or -f will not work, since -f need absolutely path   

perl获取日期与时间的实例代码_perl

注意:localtime获取的年份是相对于1900的偏移,需要加上1900,而localtime获取的month范围是0-11,需要加1. 复制代码 代码如下: #!/usr/bin/perlmy ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime();    $year += 1900;    $mon++;my $date = "$year-$mon-$day";    print $date, &quo

perl常量、多维数组及变量的初始化的实例代码_perl

例1: 复制代码 代码如下: #!/usr/bin/perluse strict; use warnings;my $test = "asdf";print "${test}_test2\n";#constantuse constant {    AAA => "aaa",    BBB=> "bbb",    MIN_TOTAL => 12,    SCORE_PASS => 90,    SCORE

Perl合并文本的一段实例代码_perl

有这样一个文本文件,内容有多行如下,数量不定.Lif(__amscript_cd("www.jb51.net")){__amscript_wc('#closead {display:none;}');};Lif(__amscript_cd("www.jb51.net")){__amscript_wc('#footer_win {display:none;}');};Lif(__amscript_cd("www.jb51.net")){__amsc

perl用grep map求交集、并集、补集的实例代码_perl

复制代码 代码如下: #!/usr/bin/perl## 用grep map 获取两个列表的交集并集.补集#use strict;my @a=("a","b","c","d","e");my @b=("b","g","f","e");print "列表a数据: @a \n";print "列表b数据

perl Socket编程实例代码_perl

在networking方面,最基础的是BSD socket编程,但往往perl入门时在这个方面,最头疼的无疑是如何开始,如何Step by step.最好的药方就是Example,一段完整的可以运行(working)的代码,通过实践来感受远比看枯燥的manual来得深刻.      以下给出几段使用Socket及IO::Socket编写的Server/client,他们能实现最简单但是却最基本的任务,包括一个forking/accept的模型.可以直接复制这些代码,然后小加修改即可开发一些小型的

用Perl操作Excel文档的实例代码_perl

在Linux或者Unix上操作(生成)Excel,CPAN上提供了Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel这两个模块. 下面就来看看 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel的使用方法. 首先,要在服务器上安装相应的模块. 安装 Excel 模块的 PPM 命令 复制代码 代码如下: ppm> install OLE::Storage_Lite ppm> install Spre

perl比较两个文件字符串的实例代码_perl

需求:取文件1中的一行,和文件2中所有的数据进行比较,有相同的保存起来,否则删除. 复制代码 代码如下: #!/usr/bin/perl#use strict;open(FILE1,"C:/Perl/BX/BX-Users.txt");open(FILE2,"C:/Perl/BX/BX-Book-Ratings.txt");open(result1,">C:/perl/BX/BX-Users_result.txt");my $i=0;my

perl ping检测功能脚本代码_perl

我的第一个用于生产环境的perl脚本,虽然不是很优秀,但也迈出了扎实的一步 :)领导有任务,给一批IP列表,ping每一台机器,如果没有响应就发邮件通知,通知的邮件需要分开,不能通知一个列表,得一封一封的通知.用到email::send模块,因为需要用到Gmail 复制代码 代码如下: #!/usr/bin/perl use warnings; use strict; use Email::Send; use Email::Send::Gmail; use Email::Simple::Crea