Perl中如何使用Log::Log4perl模块为脚本添加日志功能
Perl两数相加脚本问题修复与Log::Log4perl集成方案
原脚本存在的问题
- 取值逻辑冲突:代码先后使用标准输入、命令行参数两种方式给
$num1、$num2赋值,逻辑冗余会导致参数取值不符合预期 - 缺少参数合法性校验:未对
GetOptions的执行结果、传入参数的合法性做判断,异常场景下会直接报错退出 - Log::Log4perl未做初始化调用,也没有实例化日志对象输出日志,因此日志功能无法生效
修复后完整代码(以命令行传参场景为例)
use strict; use warnings; use Getopt::Long; use Log::Log4perl qw(:easy); # 初始化Log4perl,简易配置:输出到终端,日志级别为INFO,格式包含时间、级别、日志内容 Log::Log4perl->easy_init({ level => $INFO, layout => "%d{yyyy-MM-dd HH:mm:ss} %p - %m%n" }); # 获取日志实例 my $logger = Log::Log4perl->get_logger(); my ($num1, $num2); # 解析命令行参数 my $res = GetOptions( "numone=i" => \$num1, "numtwo=i" => \$num2 ); # 校验参数解析结果 if (!$res || !defined $num1 || !defined $num2) { $logger->error("参数传入错误,请使用格式:perl $0 --numone 整数 --numtwo 整数"); exit 1; } $logger->info("成功读取参数:num1=$num1,num2=$num2"); my $add = $num1 + $num2; $logger->info("两数相加计算结果为:$add"); print $add."\n";
运行说明
执行脚本时传入对应整数参数即可,示例命令:perl add.pl --numone 12 --numtwo 34
运行后会先输出INFO级别的日志信息,最后打印计算结果。如果参数传入错误,会输出ERROR级别的报错提示。
内容的提问来源于stack exchange,提问作者Saira
相关产品推荐
相关产品推荐

