使用perl在日志文件中提及时间

时间:2014-04-29 06:35:22

标签: perl

我想使用perl脚本生成一个包含时间的日志文件。我能够生成一个日志文件,其中包含我想要打印的所有日志。但是问题正在发生,因为我在生成日志时无法找到以及执行过程需要多长时间。

我的日志文件打印在以下行:

添加错误ou = People,dc = egi,dc = example,dc = com:错误代码68.添加的错误为uid = Tanushree8,ou =,dc = example,dc = com:错误代码34。为id = Tanushree44,ou = People,dc = example,dc = com:错误代码68添加时出错。

我想打印错误生成的时间以及日志。请指教。

1 个答案:

答案 0 :(得分:5)

如果您只想将日期时间添加到现有代码中:

use POSIX qw/strftime/;
my $msg = 'Hello World!';
sprintf(
   "%s %s",
   strftime("%F %H:%M:%S", localtime),
   $msg
);
print "$msg\n"

或者......您可以在CPAN上使用众多与日志相关的模块之一。

我目前正在使用Log :: Any作为项目。

a)创建一个初始化记录器的包

package MyApp::InitLogger;
use strict;
use warnings;
use feature qw/ say /;
use Log::Any::Adapter;
use Log::Dispatch;
use POSIX qw/strftime/;
my $log_file = '/var/log/myapp.log';

my $log = Log::Dispatch->new(
    outputs   => [
            [
            'Screen',
            name      => 'screen',
            min_level => 'debug',
            newline   => 1
            ],
            [
            'File',
            filename  => $log_file,
            min_level => 'debug',
            newline   => 1,
            mode      => 'append'
            ]
    ],
    callbacks => [
        sub {
            my %msg = @_;
            return sprintf(
                "%s %d %s",
                strftime("%F %H:%M:%S", localtime),
                $$,
                $msg{message}
            );
        }
    ]
);

Log::Any::Adapter->set( 'Dispatch', dispatcher => $log );

1;

b)您想要记录某事的地方

use MyApp::InitLogger;
use Log::Any qw/$log/;

$log->debug('hello world');