package Kephra::Log; $VERSION = '0.01'; use strict; use warnings; sub setup_logging { eval { require Log::Dispatch; require Log::Dispatch::File; }; if ($@) { _setup_fake_logger(); } else { _setup_real_logger(); } $main::logger->info("Starting"); return; } sub _setup_fake_logger { package Kephra::FakeLogger; $main::logger = bless {}, __PACKAGE__; no strict 'refs'; foreach my $l ( qw( debug info notice warning err error crit critical alert emerg emergency ) ) { *{$l} = sub {}; } return; } sub _setup_real_logger { mkdir $Kephra::temp{path}{logger}; # TODO: setup pseudo logger in case the directory does not exist or # otherwise cannot start the logger, report error $main::logger = Log::Dispatch->new; require POSIX; my $ts = POSIX::strftime("%Y%m%d", localtime); print File::Spec->catfile($Kephra::temp{path}{logger}, "$ts.log"); $main::logger->add( Log::Dispatch::File->new( name => 'file1', min_level => ($ENV{KEPHRA_LOGGIN} || 'debug'), filename => File::Spec->catfile($Kephra::temp{path}{logger}, "$ts.log"), mode => 'append', callbacks => \&_logger, )); $SIG{__WARN__} = sub { $main::logger->warning($_[0]) }; return; } sub _logger { my %data = @_; # TODO maybe we should use regular timestamp here and turn on the hires timestamp # only if KEPHRA_TIME or similar env variable is set require Time::HiRes; return sprintf("%s - %s - %s - %s\n", Time::HiRes::time(), $$, $data{level}, $data{message}); } sub msg { message(@_) } sub message { #Wx::LogMessage( "Hello from MyTimer::Notify!" ); # Wx::Log::SetActiveTarget( delete $this->{OLDLOG} ); #$this->{OLDLOG} = #Wx::Log::SetActiveTarget( Wx::LogTextCtrl->new( $this->{TEXT} ) ); # #Wx::LogTraceMask( 'test', "You can't see this!" ); #Wx::Log::AddTraceMask( 'test' ); #Wx::LogTraceMask( "Wx::LogTraceMask" ); #Wx::Log::SetActiveTarget( $this->{PANEL}->{OLDLOG} ); } sub warn { Kephra::App::StatusBar::info_msg(@_) } 1;