免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5334 | 回复: 6
打印 上一主题 下一主题

我写的记录log的sub,太丑了,谁能写个简洁的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-30 14:34 |只看该作者 |倒序浏览
20可用积分
  1. sub LogNor {       
  2.         my $nor_log_path = "D:\\perl_test\\arc_zip\\";
  3.         my $year = strftime "%Y", localtime;
  4.         my $mont = strftime "%m", localtime;
  5.         my $day = strftime "%d", localtime;
  6.         my $temp_path = "";

  7.         $temp_path = $nor_log_path.$year;

  8.         if (-e $temp_path){

  9.                 } else {
  10.                         eval{mkdir($temp_path)};
  11.                 }

  12.         $temp_path = $nor_log_path.$year."\\".$year."-".$mont;
  13.         if (-e $temp_path) {

  14.                 } else {
  15.                         eval{mkdir($temp_path)};
  16.                         if($@) {   
  17.                                
  18.                         }
  19.                 }
  20.         $temp_path = $nor_log_path.$year."\\".$year."-".$mont."\\".$year."-".$mont."-".$day;
  21.         if (-e $temp_path){

  22.                 } else {                       
  23.                         eval{mkdir($temp_path)};
  24.                 }

  25.         my $today = strftime "%Y-%m-%d", localtime;
  26.                
  27.         my $time_stmp = strftime "[%Y-%m-%d %H:%M:%S]", localtime;
  28.         open(OUTFILE, ">>".$temp_path."\\".$today.".log");
  29.             print OUTFILE ("$time_stmp".(@_)[0] ."\n");
  30.         close OUTFILE;
  31. }
复制代码

最佳答案

查看完整内容

推荐下个perltidy模块,可以用来整理一下代码。稍微改了一下你的函数{:3_193:}

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
2 [报告]
发表于 2013-08-30 14:34 |只看该作者
本帖最后由 stanley_tam 于 2013-08-30 22:30 编辑

推荐下个perltidy模块,可以用来整理一下代码。
稍微改了一下你的函数{:3_193:}
  1. sub LogNor {
  2.     my $string = shift || q{};
  3.     use File::Path qw{ make_path };
  4.     use File::Spec;

  5.     my $nor_log_path = 'D:\perl_test\arc_zip';
  6.     my ($year, $mont, $day)= split /-/, strftime '%Y-%m-%d', localtime;

  7.     my $temp_path = File::Spec->catfile(
  8.         $nor_log_path, $year, "$year-$mont", "$year-$mont-$day"
  9.     );

  10.     # make the dirs or keep silent
  11.     eval{ make_path $temp_path };

  12.     my $today = "$year-$mont-$day";
  13.     my $time_stmp = strftime '[%Y-%m-%d %H:%M:%S]', localtime;

  14.     open my $output_fh, '>>', File::Spec->catfile($temp_path, "$today.log");
  15.     if ($output_fh) {
  16.         print {$output_fh} "$time_stmp $string\n";
  17.         close $output_fh;
  18.     }
  19. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-08-30 16:46 |只看该作者
建议你还是用一些日志模块吧,例如 Log::Minimal

论坛徽章:
0
4 [报告]
发表于 2013-08-30 16:58 |只看该作者
my $dir="temp/xxx/abc/2013/08/30";
system("mkdir -p $dir");

用系统调用的mkdir替换你那一连串的if,mkdir即可缩短大半。。

论坛徽章:
0
5 [报告]
发表于 2013-08-30 17:07 |只看该作者
回复 3# xfilesliuli

没注意是windows,换成md ,-p都不用了


   

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
6 [报告]
发表于 2013-08-31 07:31 |只看该作者
本帖最后由 rubyish 于 2013-08-31 04:29 编辑

也试试:

  1. sub LOG {
  2.     my ( $LD, @LT ) = ( "/tmp/LOG/", localtime );
  3.     my ( $Y, $M, $D, $Td, $St ) = map { strftime $_, @LT }
  4.       "%Y", "%m", "%d", "%Y-%m-%d", "[%Y-%m-%d %H:%M:%S]";
  5.     my @DIR = map $a = $a .= $_, "$LD$Y", "/$Y-$M", "/$Y-$M-$D";
  6.     -e or eval { mkdir } for @DIR;
  7.     open F, '>>', "$DIR[-1]/$Td.log";
  8.     print F "$St$_[0]\n";
  9.     close F;
  10. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP