Hey Haj :)
vielen Dank nochmals. Ich habe aktuell noch ein Problem :
Ich habe doch eine Routine für ein Untermodul :
if ( $@ )
{
print "Aktuelles Objekt : $CurrentObject" , "\n";
if ( $CurrentObject && $CurrentObject ne $Package )
{
[color=red]$Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject" );[/color]
} else { $Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Moduls $Package" ); }
}
Meine Frage ist, wann ist denn "$CurrentObject && $CurrentObject ne $Package" ??
Egal, wo ein Modul lade, ist es nie ein Untermodul, es kommt immer die 2. Meldung.
Außerdem noch :
Wenn ich die Log - Ausgabe bemühe, werden die Subroutinen übergeben.
Leider die Falschen. Das ist der relevante Teil des Log() Aufrufs :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
my ( $Self, %Parameter ) = @_;
# Übergabe des Caller - Aufrufs
my $Caller = $Parameter{ Caller } || 0;
# Speicherung der Fehler - Details für das Debugging ( Aufruf , Datei , Zeile , Sub - Routine )
my ( $Package1 , $Filename1 , $Line1 , $Subroutine1 ) = caller( $Caller + 0 );
my ( $Package2 , $Filename2 , $Line2 , $Subroutine2 ) = caller( $Caller + 1 );
print "Modul : $Package1 | Datei : $Filename1 | Zeile : $Line1 | Sub - Routine : $Subroutine1" , "\n";
print "Modul : $Package2 | Datei : $Filename2 | Zeile : $Line2 | Sub - Routine : $Subroutine2" , "\n";
$Subroutine2 ||= $0;
# Log Backend
$Self -> { Backend } -> Log( Priority => $Priority ,
Message => $Message ,
LogPrefix => $Self -> { LogPrefix } ,
Module => $Subroutine2 ,
Line => $Line1 ,
);
Wenn ich das nun ausführe, also ein falsches Modul lade, erhalte ich folgendes Ergebnis :
Prio : error
Prio - Num : 16
Message : Fehler bei der Initialisierung des Moduls Kernel::Modules::Mist
Caller : 0
Modul : Kernel::System::ObjectManager | Datei : .../ObjectManager.pm | Zeile : 225 | Sub - Routine : Kernel::System::Log::Log
Modul : Kernel::System::ObjectManager | Datei : .../ObjectManager.pm | Zeile : 139 | Sub - Routine : Kernel::System::ObjectManager::_DieWithError
Das
my $Zusaetzliches_Loader = $Kernel::OM -> Get( 'Kernel::Modules::Mist' );
führe ich in dem Script "InterfaceInstaller.pl" aus, daher denke ich
bzw. möchte ich, dass anstatt "Kernel::System::Log::Log" auch die
korrekte Subroutine, in der der Fehler vorkommt, erscheint. Sonst
nützt das ganze Fehlerhandling nichts, wenn man wieder suchen muss,
wo der Fehler steckt. ;) :/
Hier nochmal die _DieWithError Sub :
sub _DieWithError {
my ( $Self, %Parameter ) = @_;
if ( $Self -> { Objects } -> { 'Kernel::System::Log' } )
{
$Self -> { Objects } -> { 'Kernel::System::Log' } -> Log( Priority => 'Error' ,
Message => $Parameter{ Error } );
}
# Carp::croak $Parameter{ Error };
}
Allerdings wird erst die Subroutine _DieWithError & anschließend das Log
aufgerufen.
Ich hoffe, dass du weisst, was ich meine.
Viele Grüße
YAPD
Last edited: 2019-05-31 23:52:44 +0200 (CEST)
Yet Another Perl Developer