Thread Wie Log-Verarbeitung ohne Abbruch bewerkstelligen (12 answers)
Opened by YAPD at 2019-05-31 19:09

YAPD
 2019-05-31 22:36
#190074 #190074
User since
2015-09-20
146 Artikel
BenutzerIn

user image
Hey Haj :)

vielen Dank nochmals. Ich habe aktuell noch ein Problem :

Ich habe doch eine Routine für ein Untermodul :
Code: (dl )
1
2
3
4
5
6
7
8
9
10
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 :

Code: (dl )
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 :

Code: (dl )
1
2
3
4
5
6
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
Code: (dl )
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 :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
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

View full thread Wie Log-Verarbeitung ohne Abbruch bewerkstelligen