]>
Commit | Line | Data |
---|---|---|
84dc3d6f TL |
1 | package Proxmox::Log; |
2 | ||
3 | use strict; | |
4 | use warnings; | |
5 | ||
6 | use Carp; | |
7 | use POSIX qw(strftime); | |
8 | use Time::HiRes qw(gettimeofday); | |
9 | ||
10 | use base qw(Exporter); | |
11 | our @EXPORT = qw(log_debug log_error log_info log_notice log_warn); | |
12 | ||
13 | my $log_fd; | |
14 | sub init { | |
15 | my ($log_file) = @_; | |
16 | croak "log fd is already defined, refuse to reinitialize!" if defined($log_fd); | |
17 | $log_file = "/tmp/install.log" if !defined($log_file); | |
18 | $log_fd = IO::File->new(">${log_file}") or croak "could not open log file - $!\n"; | |
dc6c1a80 | 19 | log_info("initialized log"); |
84dc3d6f TL |
20 | } |
21 | ||
22 | my sub iso_like_date_time { | |
23 | my ($now_seconds, $now_microseconds) = gettimeofday; | |
24 | my $now_millis = int($now_microseconds / 1000); | |
25 | return strftime("%F %H:%M:%S", localtime($now_seconds)) . sprintf(".%03d", $now_millis); | |
26 | } | |
27 | ||
28 | my sub _log { | |
29 | my ($level, $message) = @_; | |
30 | ||
31 | my $fd = $log_fd; | |
32 | if (!defined($log_fd)) { | |
33 | carp "log FD not initialized, falling back to stderr"; | |
34 | $fd = *STDERR; | |
35 | } | |
36 | ||
37 | my $date_time = iso_like_date_time(); | |
38 | $level = uc($level); | |
39 | chomp $message; | |
40 | ||
41 | print $log_fd "$date_time $level: $message\n"; | |
42 | } | |
43 | ||
44 | sub log_cmd { _log('cmd', @_); } | |
45 | sub log_debug { _log('debug', @_); } | |
46 | sub log_error { _log('error', @_); } | |
47 | sub log_info { _log('info', @_); } | |
48 | sub log_warn { _log('warn', @_); } | |
49 | ||
50 | 1; |