# -- # Copyright (C) 2001-2019 OTRS AG, https://otrs.com/ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- ## nofilter(TidyAll::Plugin::OTRS::Perl::Time) package Kernel::System::Log::File; use strict; use warnings; our @ObjectDependencies = ( 'Kernel::Config', 'Kernel::System::Encode', ); sub new { my ( $Type, %Param ) = @_; # allocate new hash for object my $Self = {}; bless( $Self, $Type ); # get config object my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); # get logfile location $Self->{LogFile} = $ConfigObject->Get('LogModule::LogFile') || die 'Need LogModule::LogFile param in Config.pm'; # get log file suffix if ( $ConfigObject->Get('LogModule::LogFile::Date') ) { my ( $s, $m, $h, $D, $M, $Y, $WD, $YD, $DST ) = localtime( time() ); ## no critic $Y = $Y + 1900; $M = sprintf '%02d', ++$M; $Self->{LogFile} .= ".$Y-$M"; } # Fixed bug# 2265 - For IIS we need to create a own error log file. # Bind stderr to log file, because iis do print stderr to web page. if ( $ENV{SERVER_SOFTWARE} && $ENV{SERVER_SOFTWARE} =~ /^microsoft\-iis/i ) { ## no critic if ( !open STDERR, '>>', $Self->{LogFile} . '.error' ) { ## use critic print STDERR "ERROR: Can't write $Self->{LogFile}.error: $!"; } } return $Self; } sub Log { my ( $Self, %Param ) = @_; my $FH; # open logfile ## no critic if ( !open $FH, '>>', $Self->{LogFile} ) { ## use critic # print error screen print STDERR "\n"; print STDERR " >> Can't write $Self->{LogFile}: $! <<\n"; print STDERR "\n"; return; } # write log file $Kernel::OM->Get('Kernel::System::Encode')->ConfigureOutputFileHandle( FileHandle => $FH ); print $FH '[' . localtime() . ']'; ## no critic if ( lc $Param{Priority} eq 'debug' ) { print $FH "[Debug][$Param{Module}][$Param{Line}] $Param{Message}\n"; } elsif ( lc $Param{Priority} eq 'info' ) { print $FH "[Info][$Param{Module}] $Param{Message}\n"; } elsif ( lc $Param{Priority} eq 'notice' ) { print $FH "[Notice][$Param{Module}] $Param{Message}\n"; } elsif ( lc $Param{Priority} eq 'error' ) { print $FH "[Error][$Param{Module}][$Param{Line}] $Param{Message}\n"; } else { # print error messages to STDERR print STDERR "[Error][$Param{Module}] Priority: '$Param{Priority}' not defined! Message: $Param{Message}\n"; # and of course to logfile print $FH "[Error][$Param{Module}] Priority: '$Param{Priority}' not defined! Message: $Param{Message}\n"; } # close file handle close $FH; return 1; } 1;