]> git.proxmox.com Git - pve-installer.git/blob - Proxmox/Log.pm
bump version to 8.1.11
[pve-installer.git] / Proxmox / Log.pm
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";
19 log_info("initialized log");
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;