IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

记录程序日志

扶凯 2011-06-01 13:40:29 累计浏览 3,361 次
本机暂存

写程序时,打印日志是非常好的习惯,对我们排错,查问题非常有用。平时我们喜欢自己写个函数来处理日志,要么直接 print .在 Perl 中有个专门处理日志的模块叫 Log::Log4perl 这个是个重量级的家伙,所以不喜欢,配置的可读性也不怎么样。

但他和操作系统一样,提供了几个级别的日志 FATAL, ERROR, WARN, INFO,DEBUG, TRACE 几个日志级别给我们使用,我们可以根据不同的时候使用不同的级别来输出不同的内容。

我现在要介绍一个小模块 Log::Minimal 也达到上面的功能。这个提供 DEBUG、INFO、WARN、CRITICAL 这几个级别的日志给我们使用。

基本使用方法
使用非常简单,直接 use 后就能使用。

#!/usr/bin/perl
use strict;
use warnings;
use Log::Minimal;
 
critf("foo"); 
warnf("foo");
infof("foo");
debugf("foo");

输出的内容如下:
2011-05-25T14:21:51 [CRITICAL] foo at t.pl line 6
2011-05-25T14:21:51 [WARN] foo at t.pl line 7
2011-05-25T14:21:51 [INFO] foo at t.pl line 8
默认只显示 INFO 级别以上的日志。如果要显示 INFO 以下的日志,可以直接使用环境变量 $ENV{LM_DEBUG}

$ LM_DEBUG=1 perl log.pl       
2011-05-25T14:23:15 [CRITICAL] foo at t.pl line 6
2011-05-25T14:23:15 [WARN] foo at t.pl line 7
2011-05-25T14:23:15 [INFO] foo at t.pl line 8
2011-05-25T14:23:15 [DEBUG] foo at t.pl line 9

修改日志打印级别
想修改显示级别,让更加多的日志显示的话

local $Log::Minimal::LOG_LEVEL = "INFO";

修改日志打印的格式

local $Log::Minimal::PRINT = sub {
    my ( $time, $type, $message, $trace) = @_; 
    print("$time $type $message $trace\n");
};

这个日志在打印时,可以直接加一个 local $Log::Minimal::AUTODUMP = 1; 可以自动打印数据结构。

打印日志到指定的文件
这个只要配合上 File::Stamped 这个模块,可以很方便的给日志存成文件,我们直接使用 File::Stamped 成生一个日志存放到文件的句柄,然后修改一下 Log::Minimal 的输出默认打印到这个句柄就行了。

#!/usr/bin/perl
use strict;
use warnings;
use Log::Minimal;
use File::Stamped;
 
my $fh = File::Stamped->new(pattern => 'myapp_log_%Y%m%d.txt');
local $Log::Minimal::PRINT = sub {
    my ( $time, $type, $message, $trace) = @_;
    print {$fh} "$time [$type] $message at $trace\n";
};

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. perl更新/修改/删除文本文件内容 (累计阅读 10,648)
  2. perl大牛flw传说 (累计阅读 7,714)
  3. AWStats是一个基于Perl的WEB日志分析工具。 (累计阅读 7,174)
  4. perl模块Getopt::Std用法及实例-从命令行读取参数模块 (累计阅读 7,017)
  5. [Perl] Template::Toolkit 模板技术. (累计阅读 6,344)
  6. Perl命令行常见用法及技巧 (累计阅读 5,912)
  7. PHP将死,何以为继? (累计阅读 5,918)
  8. 在perl中连接和使用sqlite做数据存储 (累计阅读 5,811)
  9. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读. (累计阅读 5,608)
  10. perl的expect使用方法,实现非交互式登录。 (累计阅读 5,486)